[파이썬 스타일]


1. 파이썬 파일은 들여쓰기에 space 4칸을 사용하십시오. HTML은 2칸을 사용합니다.


2. 따로 명시가 되어있지 않는 한은 PEP8을 따릅니다.


flake8을 사용해서 문제가 있는 코드를 확인하고, 특히 하나가 PEP8이랑 다른데 바로 79길이제한입니다.


코드줄을 79로 제한할 필요는 없습니다. 79자의 코드 길이는 GitHub 코드를 볼때 최적화된 너비이므로 Django에서는 119자까지 허용합니다. 


3. 들여쓰기에는 4개의 스페이스를 사용하세요


4. 변수, 함수 및 메소드 이름은 camelCase가 아닌 밑줄을 사용하시기 바랍니다.


poll.getUniqueVoters (X)

poll.get_unique_voters 가 맞습니다.


5. 클래스 이름에는 첫글자를 대문자로 사용합니다.


6. DocString은 꼭 사용하는걸로 합시다.


def foo():
    """
    Calculate something and return the result.
    """
    ...


7. testCode에서는 assetRaises() 대신에, assertRaisesMessage()를 사용해서 예외 메세지를 확인할 수 있습니다. 


[임포트]


1. isort를 사용해서 import 정렬을 자동화하시기 바랍니다.


$ pip install isort
$ isort -rc .

만약, 특별한 경우에 import 정렬이 필요없다고 생각되신다면 

아래의 방침을 따라하십시오.


import module  # isort:skip

2. import를 쓰기전에는 항상 from을 사용하시기를 바랍니다.

import module이 아닌 from module import objects가 맞는겁니다.


3. import 시에는 무조건 상대적 가져오기가 맞는겁니다.

import corn from xx 가아닌.

import . from xx 가 맞습니다.


4. 만약 긴줄의 import가 필요하다면 아래와같이 하십시오. 


from django.http.response import (
    Http404, HttpResponse, HttpResponseNotAllowed, StreamingHttpResponse,
    cookie,
)

import 마지막에는 , 를 포함해야 하고, 닫는 괄호는 마지막 줄에 넣습니다.


5. 마지막 import와 module 코드 사이에는 빈줄 하나를 사용하고 첫번째 함수 또는 클래스위에 빈줄 2개를 사용하시기 바랍니다.


전체적인 예입니다.


# future
from __future__ import unicode_literals

# standard library
import json
from itertools import chain

# third-party
import bcrypt

# Django
from django.http import Http404
from django.http.response import (
    Http404, HttpResponse, HttpResponseNotAllowed, StreamingHttpResponse,
    cookie,
)

# local Django
from .models import LogEntry

# try/except
try:
    import pytz
except ImportError:
    pytz = None

CONSTANT = 'foo'


class Example(object):
    # ...

6. 가능한 한, 편리한 임포트 방식을 사용하십시오.


from django.views.generic.base import View

위의 방법 대신


from django.views import View

위의방법이 더 좋습니다.


[템플릿 스타일]


{{foo}}

위의 방법은 안되고,

{{ foo }}

위의 방법을 사용하십시오.


[뷰 스타일]


1. 항상 첫번째 파라미터는 request입니다. 명심하세요.


def my_view(request, foo):
    # ...

맞는방식이고


def my_view(req, foo):
    # ...

잘못된 방식입니다.


[모델 스타일]


1. 필드 이름은 모두 소문자 이어야만 하고, camelCase 대신에 밑줄을 사용해야합니다.


class Person(models.Model):
    first_name = models.CharField(max_length=20)
    last_name = models.CharField(max_length=40)

아래는 잘못된 예입니다.

class Person(models.Model):
    FirstName = models.CharField(max_length=20)
    Last_Name = models.CharField(max_length=40)


2. 메타 클래스는 필드가 다 정의 되고 난다음에 작성되어야 하고, 필드와 클래스를 정의를 구분하는 하나의 빈줄이 필요합니다.


아래는 정상적인방식


class Person(models.Model):
    first_name = models.CharField(max_length=20)
    last_name = models.CharField(max_length=40)

    class Meta:
        verbose_name_plural = 'people'

아래는 안됩니다.


class Person(models.Model):
    first_name = models.CharField(max_length=20)
    last_name = models.CharField(max_length=40)
    class Meta:
        verbose_name_plural = 'people'

아래도 안됩니다.


class Person(models.Model):
    class Meta:
        verbose_name_plural = 'people'

    first_name = models.CharField(max_length=20)
    last_name = models.CharField(max_length=40)


3. [이거는 꼭 해야되는지 모르겠는데 사실 PYTHON3 만 쓰겟다! 하면 안해도됩니다.]

__str__ method를 사용했다면

python_2_unicode_compatible() 을 사용해서 모델을 꾸미세요.


4. 모델의 내부 클래스와 표준 메소드의 순서는 다음과 같아야 합니다. 


[1] 모든 db 필드

[2] 커스텀 매니저 속성들

[3] 메타클래스

[4] def __str__()

[5] def save()

[6] def get_absolute_url()

[7] 다른 커스텀 메소드들


5. 만약 choice 필드를 사용한다면, 모델의 클래스 속성으로 대문자 이름을 가진 튜플의 튜플로 각 선택사항을 정의해야합니다.


아래의 예를보세요


class MyModel(models.Model):
    DIRECTION_UP = 'U'
    DIRECTION_DOWN = 'D'
    DIRECTION_CHOICES = (
        (DIRECTION_UP, 'Up'),
        (DIRECTION_DOWN, 'Down'),
    )

[django.conf.settings]


모듈은 일반적으로 django.conf.settings에 저장된 설정을 최상위 레벨에서 사용하지 말아야 합니다.


[기타 잡다한것]


1. 국제화를 위해서 모든 국제 문자를 지원하십시오.i18n 설명서를 참조하세요


2. 사용하지 않는 import 는 제거하십시오.


3. 제발 코드에 이름을 넣지마십시오 이것은 굉장히 멍청한 짓입니다. 

Posted by C마노
,