wiki:programador/codigo

Syntax Wiki : http://trac.edgewall.org/wiki/WikiFormatting

GestorPSI - Padrão de Desenvolvimento

Padrão de código e organização de arquivos e nomes para o GestorPSI

O objetivo desse documento é manter a qualidade e organização dos arquivos do GestorPSI.

  • tecnologias usadas

django mysql html css JavaScript? JQuery Json

  • manter indentação para cada linguagem
  • comentar código:

chamada para função:

variaveis : tipo (integer, string, Pessoa.id, array, outros)

explicar quando o código é complexo, dificil te entender, motivo e problemas. Seja direto.

----------------- Partes críticas do desenvolvimento

  • permissão do usuário. Quem tem permissão para:
    • inserir
    • alterar
    • apagar registro. Até o momento ( 28 04 2015 ) NÃO É PERMITIDO APAGAR NENHUM REGISTRO! Usar Boolean Field: campo is_active para filtrar quando necessário.
  • funcionamento do código, segurança.

Mostrar apenas os dados da organização, NUNCA de outra organização. Filtrar sempre pela Org.

  • Qualidade do código PY usando pyflakes ou outro. Verificar imports e variáveis não usadas.
  • Leitura

google : boas praticas de programacao nome_linguagem

----------------- Referências

  • Pode ser usada como referência a APP covenant
  • indentação

http://pt.wikipedia.org/wiki/Indenta%C3%A7%C3%A3o

  • model

https://docs.djangoproject.com/en/1.8/ref/models/fields/

  • forms

https://docs.djangoproject.com/en/1.8/topics/forms/modelforms/ https://docs.djangoproject.com/en/1.8/topics/forms/ https://docs.djangoproject.com/en/1.8/ref/forms/widgets/ https://docs.djangoproject.com/en/1.8/ref/forms/fields/

----------------- Estrutura de diretorio e arquivo para APP

  • O nome da app deve ser sempre no singular em inglês
    organization
    client
    referral
  • Estrutura de diretorio e arquivos
    gestorpsi/<app_name>/views.py
    gestorpsi/<app_name>/models.py
    gestorpsi/<app_name>/*.py
    gestorpsi/<app_name>
    gestorpsi/templates/
    gestorpsi/templates/<app_name>_home.html
    gestorpsi/templates/<app_name>_list.html
    gestorpsi/templates/<app_name>_form.html
    gestorpsi/templates/<app_name>_menu.html

----------------- cabeçalho - Licença GNU

* TODO arquivo deve ter esse cabeçalho no início como comentário.

Copyright (C) 2008 GestorPsi

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

----------------- assinatura programador para todos os arquivos

Antes do código ou alteração

autor: nome_completo
email: email@…
data: 31 12 2001
equipe: UnB ou GestorPSI

----------------- views.py

# -*- coding: utf-8 -*-

'''
    Joao da Silva Sauro
    joao@email.com
    31 12 2015
    UnB
'''

def save()
    '''
       salvar novo cadastro / formulario
    '''
    ...
    obj.save()


    '''
        filtrar pela organização
        retorna array com lista de Clientes()

        org : Organization()
        date : datetime
    '''
    def __init__(self, org, date, *args, **kwargs):
        return Client.objects.filter(organization=org, join=date, ... )

    return template/app_name/app_name_save.html

----------------- models e forms .py

  • Se relacionamento é ManyToMany? usar outra tabela, não usar CharField? com choices pois fica dificil o filtro e mostrar o valor do registro.
  • Retornar sempre em ordem alfabética quando possível
  • Retornar campos "únicos" : id , nome , outro para facilitar o uso no ADMIN.
    class ClassName(models.Model):
        name = models.CharField(_(u'Name'), max_length=250, null=False, blank=False)
        ...

        def __unicode__(self):
            return u"%s - %s" % ( self.id, self.name )

            class Meta:
                ordering = ['name']
  • O metodo deve iniciar sempre com "get_" e terminar com underline "_"
        def get_list_clients_(self):
            ...
            return ...
    

----------------- HTML

  • Chamada para arquivos JS usado apenas nesse HTML
  • Mostrar valor com nome do objeto.campo {{ client.name }} Errado {{ client }}
    {% block extra_header %}
        <script type="text/javascript" src="/media/js/jquery.maskMoney.min.js"></script>
        <script type="text/javascript" src="/media/js/gestorpsi.covenant.forms.js"></script>
    {% endblock %}
  • "block extra_header" está em gestorpsi/templates/core/main.html
  • quando não tiver como colocar o código JS em um arquivo JS.
        <!-- comentário, motivo chamada no meio do código -->
        <script>
         ...
        </script>
    

----------------- JavaScript?

  • Local

media/js

  • Formato nome

/media/js/gestorpsi/ <app_name> / nome_form_funcao.forms.js
ex:
/media/js/gestorpsi/covenant/form_save.js

Last modified 5 years ago Last modified on Apr 29, 2015 6:33:41 PM