파이썬 장고 정리내용
models.py
class 모델이름(models.Model):
필드이름1 = models.필드타입(필드옵션)
필드는 데이터베이스에셔 테이블 열을 의미한다.
단 필드 이름을 (clean, save, delete)같은 모델 API와 동일한 이름을 주면 안된다.
Model은 데이터 서비스를 제공하는 레이아웃이다.
여기에 사용되는 변수는 테이블 컬럼 메타 데이터를 정의한다.
만약 컬럼이 추가 될 경우 꼭 마이그레이션을 해줘야 테이블에 반영이 된다.
데이터베이스 필드 이름은 소문자와 밑줄로 표기한다.
CharField - TextInput
문자열 데이터를 저장하는 필드
(max_length) 최대 글자 수를 반드시 지정해주어야한다.
SlugField
제목의 별칭, 포스트를 설명하는 핵심 단어의 집합
pk를 사용하면 숫자로만 되어 뜻을 유추하기 어렵지만 슬러그는 단어들이라 이해하기 쉽다.
디폴트 길이는 50이다.
unique옵션을 이용해 특정 포스트를 검색할 때 기본 키 대신 사용된다.
allow_unicode - 한글 처리가 가능하다.
blank - 공백이 가능하다(필수 입력이 아니다)
help_text - 컬럼의 설명
TextField - Textarea
max_lengh 값을 지정하면 폼에서는 글자 수가 제한되지만 데이터베이스에는 영향을 주지 않는다.
DateTimeField - TextInput
두개의 textinput, 달력위젯, 오늘 날짜 입력 기능을 기본 제공한다.
auto_now_add - 생성시 현재 시간 자동 저장, 기본값을 재정의 할 수 없다
auto_now - 저장될 때마다 자동으로 필드를 현재시간으로 설정
class Meta
클래스의 클래스
클래스가 동작하는 방식을 정의한다
verbose_name
사용자가 읽기 쉬운 모델 객체의 이름으로 관리자 화면에 표시된다
verbose_name_plural
verbose_name과 동일하나 복수형이다
verbose_name 옵션을 지정하지 않으면 verbose_name에 s를 붙인다.
db_table
데이터베이스 테이블의 이름을 정의한다.
ordering
모델의 정렬 순서를 지정하며 기본 오름차순이다.
앞에 '-' 을 붙이면 내림차순으로 정렬된다.
def는 함수/메서드라는 뜻이다.
__str__()
모델 클래스의 객체 문자열 표현을 리턴한다.
디폴트 값은 모델명 object이다.
디폴트 문자열인 경우 객체를 알아보기 어렵기 때문에 정의해 주는 것이 좋다.
get_absolute_url()
어떠한 모델에 대해 detail 뷰를 만들게 되면 무조건 선언
이 메소드가 정의된 객체를 지칭하는 url을 반환한다
장고 내장 함수인 *reverse()를 호출한다
reverse()
파이썬 코드 안에서 URL 템플릿 태그와 비슷하게 동작하는 기능
urls.py에서 설정한 URL의 name이나, viewname을 통해서 다시 URL로 되돌릴 수 있다
인수가 있는 URL이라면 *args를 포함할 수 있다
*kwargs로 전달하는 것 또한 가능하지만 args와 동시에 전달 할 수 없다.
일치하는 URL이 없으면 NoReverseMatch 에러가 발생한다.
*args
*arguments(인수)의 줄임말이다
그래서 꼭 저 단어를 쓸 필요 없이 *myNames라고 적어도 된다
이 지시어는 여러 개(복수개의) 인자를 함수로 받을 때 쓰인다
**kwargs
keyword argument의 줄임말로 키워드를 제공한다
'키워드': '특정 값' 으로 함수 내부에 전달
admin.py
from .models import 내가 만든 모델
@admin.register(내가 만든 모델)
class 클래스이름(admin.ModelAdmin)
admin.ModelAdmin 상속을 통해 커스터마이징을 할 수 있다.
list_display = Admin목록에 보여질 필드 목록
list_display_links = 목록내에서 링크로 지정할 필드목록 (지정하지 않으면 첫번째 필드에만 링크가 적용)
list_filter = 필터 옵션을 제공할 필드 목록
search_fields = 검색박스를 표시하고 입력된 단어는 정의한 컬럼에서 검색한다
prepopulated_fields = 지정된 필드는 정의한 필드를 사용해 채워지게 만든다
urls.py
urlpatterns = [
path('', views.동작클래스이름.as_view(), name='이름정의'),
]
app_name
url의 name값 중복을 방지하기 위해서 네임스페이스를 사용한다.
ex) blog:index
views.py
class 클래스 이름 (제네릭뷰):
장고 제네릭뷰 (일부)
분류 | 이름 | 기능 |
Base View | View | 가장 기본이 되는 최상위 뷰 |
TemplateView | 템플릿이 주어지면 해당 탬플릿을 렌더링 | |
RedirectView | URL이 주어지면 해당 URL로 리다이렉트 | |
Generic Display View | ListView | 조건에 맞는 여러개의 객체를 보여줌 |
DetailView | 객체하나에 대한 상세한 정보를 보여줌 | |
Generic Edit View | FormView | 폼이 주어지면 해당 폼을 보여줌 |
CreateView | 객체를 생성하는 폼을 보여줌 | |
UpdateView | 기존객체를 수정하는 폼을 보여줌 | |
DeleteView | 기존객체를 삭제하는 폼을 보여줌 | |
Generic Date View | ArchiveIndexView | 조건에 맞는 객체 및 객체들에 대한 날짜 정보를 보여줌. |
YearArchiveView | 연도에 해당하는 객체들을 보여줌. | |
이하 생략 |
자주 사용하는 속성과 메소드
제네릭뷰의 속성
속성 | 설명 | 디폴트 |
model | 작업대상 데이터가 들어있는 모델을 지정, model대신 queryset으로 지정할수있음. | |
queryset | 작업대상이 되는 QuerySet 객체를 지정 | |
template_name | 렌더링할 템플릿 파일명을 지정 | <model_name>_list.html <model_name>_detail.html 외 |
context_object_name | 템플릿 파일에서 사용할 컨텍스트 변수명을 지정 | object_list, object 외 |
paginate_by | 페이지기능이 활성화된 경우 페이지당 몇개항목을 출력할지 정수로 지정 | |
date_field | 날짜기반뷰에서 기준이 되는 필드를 지정, 이 필드를 기준으로 년/월/일을 검사 | |
form_class | 폼을 만드는데 사용할 클래스를 지정 | |
initial | 폼에 사용할 초기데이터를 사전{ }으로 지정 | |
fields | 폼에 사용할 필드를 지정 | |
success_url | 폼에 대한 처리가 성공한 후 리다이렉트할 url지정 | |
month_format | '월'이 어떻게 출력되는지 정의 | |
success_url | 폼에 대한 처리가 성공한 후 리다이렉트할 url지정 |
제네릭뷰의 메소드
메소드 | 설명 |
get_queryset() | 출력객체를 검색하기 위한 대상 QuerySet 객체 또는 출력대상인 객체리스트를 반환한다. 디폴트는 queryset속성값을 반환한다. queryset 속성이 지정되지 않는 경우는 모델 매니저 클래스의 all()메소드를 호출해 QuerySet 객체를 생성하고 이를 반환한다. |
get_context_data(**kwargs) | 뷰에서 템플릿 파일에 넘겨주는 context 데이터를 추가하거나 변경하는 목적으로 오버라이딩 한다. |
form_valid(form) | 제출된 폼이 유효성검사를 통과하면 호출되는 메소드 또는 get_success_url()메소드가 반환하는 url로 리디이렉트를 수행 |