택시짱의 개발 노트

Two Scoops of Django - 1장 코딩 스타일 본문

Django(장고)

Two Scoops of Django - 1장 코딩 스타일

택시짱 2021. 8. 26. 18:21

1. 코딩 스타일

읽기 쉬운 코드를 만들기 위해서는

  1. 축약적이거나 함축적인 변수명은 피한다.
  2. 함수 인자의 이름들은 꼭 써준다.
  3. 클래스와 메서드를 문서화한다.
  4. 코드에 주석은 꼭 달도록 한다.
  5. 재사용 가능한 함수 또는 메서드 안에서 반복되는 코드들은 리팩터링을 해둔다.
  6. 함수와 메서드는 가능한 작은 크기를 유지한다. 어림잡아 스크롤 없이 읽을 수 있는 길이가 적합하다.

임포트 (import)

  • PEP 8은 임포트(import)를 할 때 다음과 같은 순서를 제안
  1. 표준 라이브버리 임포트
  2. 연관 외부 라이브러리 임포트
  3. 로컬 애플리케이션 또는 라이브러리에 한정된 임포트
  • 장고 프로젝트 안에서는 아래와 같은 순서로 임포트 문들을 구성할 수 있다.
# 표준 라이브러리 임포트 
from math import sqrt 
from os.path import abspath 

# 코어 장고 임포트
from django.db import models
from django.utils.translation import ugettext_lazy as _ 

# 서드 파티 앱 임포트
from django_extensions.db.models import TimeStampModel

# 프로젝트 앱 임포트 from sqlits.models import BananaSqlit
  • 장고 프로젝트에서 임포트 순서는 다음과 같다.
  1. 표준 라이브러리 임포트
  2. 코어 장고 임포트
  3. 장고와 무관한 외부 앱 임포트
  4. 프로젝트 앱 임포트

명시적 성격의 상대 임포트 이용

  • 파이썬에서는 명시적 성격의 상태 임포트(explict relative import)를 통해 모듈의 패키지를 하드 코딩하거나 구조적으로 종속된 모듈을 어렵게 분리해야 하는 경우들을 피해 갈 수 있다.
  • 좋은 예제
# cones/views.py
from django.views.generic import CreateView

# 'cones' 패키지 상대 임포트
from .models import WaffleCone
from .forms import WaffleConeForm

# 'core' 패키지 절대 임포트
form core.views ipmort FoodMixin

class WffleConeCreateView(FoodMixin, CreateView):
    model = WaffleCone
    form_class = WaffleConeForm
  • 전역/외부 임포트에 대해 로컬/내부 임포트가 지니는 또 하나의 장점은 파이썬 패키지를 하나의 코드 유닛화할 수 있다는 것이다.

import * 는 피하자

  • 다른 파이썬 모듈의 이름공간들이 현재 우리가 작업하는 모듈의 이름공간에 추가로 로딩되거나 기존 것 위에 덮여 로딩되는 일을 막기 위함
  • 나쁜 예제
  • from django.forms ipmort * from django.db.models import * # 이름 충돌 from django.forms ipmort CharField from django.db.models import CharField
  • 좋은 예제
  • from django import forms from django.db import models

2. 장고 코딩 스타일

URL 패턴 이름 에는 대시 (-) 대신 밑줄 (_) 을 이용한다.

  • 나쁜 예제
patterns = [ 
    path(route='add/', 
        view_views.add_topping, 
        name='add-topping'),
    ]
  • 좋은 예제
patterns = [
    path(route='add/', 
        view=views.add_topping,
        name='add_topping'),
    ]
반응형
Comments