Aplicação Cliente
Criando a aplicação Cliente
Como mencionado anteriormente, nossas aplicações são como módulos do projeto. A princípio vamos tratar apenas da aplicação cliente, que é responsável pelo cadastro de clientes.
Dentro do diretório do projeto, utilizamos o script manage.py para criar nossa aplicação. Podemos executar o script pelo comando python manage.py ou dar permissão de execução e executar como ./manage.py. Vamos optar pelo segundo método:
gu@notebook:~/projetos/sigep$ chmod +x manage.py
gu@notebook:~/projetos/sigep$ ./manage.py startapp cliente
gu@notebook:~/projetos/sigep$ ls cliente/
__init__.py models.py views.py
Foi criado então o diretório cliente contendo os seguintes arquivos:
__init__.py: Tal como no diretório do projeto, indica que a aplicação também é um pacote
models.py: Aqui definimos a classes que Django vai transformar em tabelas MySQL
views.py: Nosso controlador, onde definimos os métodos da nossa aplicação
Estrutura de Dados do Projeto
GrupoVencimento
Define os grupos de vencimento e o dia do mês. Ex.:
grupovencimento: GrupoA
dia_vencimento: 10
Futuramente esses dados serão usados no momento que forem emitidos relatórios de clientes por grupo e geração de boletos bancários.
Cliente
Dados referentes aos clientes. tipo_pessoa pode ser ‘F’ – pessoa física, ‘J’ – pessoa jurídica ou ‘R’ – pessoa física que representa pessoa jurídica. Ex.: Um microempresário que faz o contrato no nome dele porém o serviço é contratado para a empresa. Os campos nome, cpf e rg não podem conter valores duplicados
Bairro
Bairros onde o provedor atende. Por antender em uma única cidade, não foi necessário a criação de uma tabela para cidades e estados.
Logradouro
Ruas, avenidas, travessas ou praças onde há disponibilidade de instalação da internet.
Criando o Model
Um model contém a estrutura de dados do sistema. A grosso modo, pode-se dizer que é o arquivo que contém classes que correspondem às tabelas do banco de dados, e os atributos dessas classes correspondem aos campos das tabelas.
Cada aplicação no Django contém um arquivo chamado models.py. Nesse arquivo que serão criadas nossas classes de modelo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | from django.db import models class Bairro(models.Model): bairro = models.CharField(max_length=150) def __unicode__(self): return self.bairro class Meta: db_table = 'bairro' class Logradouro(models.Model): bairro = models.ForeignKey(Bairro) logradouro = models.CharField(max_length=250) def __unicode__(self): return self.logradouro class Meta: db_table = 'logradouro' class GrupoVencimento(models.Model): grupo_vencimento = models.CharField("Grupo",max_length=20) dia_vencimento = models.IntegerField("Dia",max_length=2) def __unicode__(self): return self.grupo_vencimento class Meta: db_table = 'grupovencimento' verbose_name = 'Grupo de Vencimento' verbose_name_plural = 'Grupos de Vencimento' unique_together = ['grupo_vencimento'] class Cliente(models.Model): TIPO_PESSOA = ( ('F','Pessoa Fisica'), ('J','Pessoa Juridica'), ('R','Representante de Pessoa Juridica') ) grupovencimento = models.ForeignKey(GrupoVencimento,verbose_name="Grupo") nome = models.CharField("Nome/Razao Social",max_length=200) apelido = models.CharField("Apelido/Nome Fantasia",max_length=200,blank=True,null=True) cpf = models.CharField("CPF/CNPJ",max_length=14,unique=True) rg = models.CharField("RG/IE",max_length=11,blank=True,null=True) orgao_rg = models.CharField("Orgao RG",max_length=6,blank=True,null=True) tipo_pessoa = models.CharField(max_length=1,choices=TIPO_PESSOA) data_nascimento = models.DateField(blank=True,null=True) data_cadastro = models.DateField(auto_now_add=True) logradouro = models.ForeignKey(Logradouro,verbose_name='Endereco',blank=True,null=True) numero = models.CharField(max_length=50,blank=True,null=True) referencia = models.CharField(max_length=250,blank=True,null=True) cep = models.PositiveIntegerField(max_length=8,blank=True,null=True) def __unicode__(self): return self.nome class Meta: db_table = 'cliente' unique_together = ('nome','cpf','rg') |
Esse processo de converter classes em tabelas é chamado de ORM – Mapeamento Objeto-Relacional. Para criar nossas tabelas é necessário primeiramente criar a base de dados no mysql e depois executar o script manage.py no diretório do nosso projeto:
gu@notebook:~/projetos/sigep$ mysqladmin -u root -p create sigepdjang
gu@notebook:~/projetos/sigep$ ./manage.py syncdb
Creating table auth_permission
Creating table auth_group
Creating table auth_user
Creating table auth_message
Creating table django_content_type
Creating table django_session
Creating table django_site
Em seguida o script perguntará se deseja criar um super-usuário para acesso ao nosso sistema. Esse tipo de autenticação do django é usado na interface de administração automática que veremos mais a frente. No nosso projeto, utilizaremos esse mesmo tipo de autenticação, logo é necessário digitar yes para poder criar uma conta. Digite o nome do super-usuário, um e-mail válido e uma senha. Se tudo foi feito corretamente, no final será exibido:
Superuser created successfully.
Installing index for auth.Permission model
Installing index for auth.Message model
Para finalizar, é necessário incluir nossa aplicação na variável INSTALLED_APPS dentro do arquivo settings.py. Essa variável contém as aplicações utilizadas no nosso projeto, portanto para cada aplicação criada é preciso defini-la.
1 2 3 4 5 6 7 | INSTALLED_APPS = ( 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'sigep.cliente', ) |















Posted in
Tags: 
Muito legal o tuto, parabéns!!
Hugs!!
Muito bom, dei só uma olhada mas com esse tipo de material o Django ira crescer cada vez mais.
Fala rapaz parabens ai ficou muito bom ,,
uma abraço
Gustavo,
Meus sinceros parabéns pelo material, está excelente.
Um desafio:
– O que tu achas de fazer uma versão desse ajax com a biblioteca mootools ?
Parabéns Gustavo,
Ouvi falar da eficiência do Django a poucos dias e procurei algo simples que pudesse me comprovar isso…
Vc sintetizou nesse post tudo o que eu estava procurando! Agora é só me aprofundar no framework. Se existirem mais posts como esse por aí tenho certeza que a comunidade Python e Django vão crescer muito em quantidade e principalmente em qualidade! 100% produção…
Verifiquei que no arquivo forms.py ao usarmos o método mark_safe, devemos incluir a classe safestring do Django.
Para resolver o problema devemos incluir a linha from django.utils.safestring import mark_safe no início do arquivo /cliente/forms.py para importar o método mark_safe.
Abs…
na linha
$(“#”+objHtmlReturn).append(”+item.fields[fieldreturn]+”);
qd escolho o bairro da um erro dizendo q a palavra ou o campo “fieldreturn” nao está definido por isso nao carrega as ruas no outro select
Excelente tutorial, colega.
Parabéns XD
Opa, tudo bom.
Primeiro quero parabenizá-lo pelo artigo. Segundo informo que o método javascript declarado acima para atualizar o select html está quebrado. Criei outro método jQuery, que ficou assim:
$( function() {
$(“select#id_bairro”).change(
function() {
$.getJSON( “/cliente/getlogradouros?id=” + $(this).val(),
function(j) {
var options = ‘———- ‘;
for ( var i = 0; i < j.length; i++) {
options += ”
+ j[i].fields['logradouro']
+ ”;
}
$(“#id_logradouro”).html(options);
$(“#id_logradouro option:first”).attr(’selected’,
’selected’);
$(“#id_logradouro”).attr(‘disabled’, false);
})
$(“#id_logradouro”).attr(’selected’, ’selected’);
})
})
Para que ele funcione, o metodo no módulo views.py precisa ser mudado para o método GET, que no meu caso ficou assim:
def getlogradouros( request ):
id = int( request.GET.get( ‘id’ ) )
lista = Logradouro.objects.filter( bairro = id )
if lista.count() > 0:
json = serializers.serialize( “json”, lista )
else:
lista = [{"pk":"0", "fields":{'logradouro':"Nenhum registro"}}]
json = simplejson.dumps( lista )
return HttpResponse( json, mimetype = “application/json” )
Ola gostei do material que vc publicou, vc terminou a segunda parte deste tutorial referente ao sistema???
@Luiz, nao cheguei a terminar, mas escrevi um artigo aqui no blog que fala um pouco sobre. O titulo é “Servidor Linux com Proxy e Controle de Banda”.
[]’s