- 새로운 화면을 만드는데 필요하다.
- fields는 Post 모델에서 가져올 필수 리스트
- 일반적으로 CreateView에서 사용되는 템플릿 이름은 "모델명_form.html"이다.
- Post 모델의 객체를 생성하는 CreateView를 구현하고 있기 때문에 post_form.html을 요청
class PostCreate(CreateView):
model = Post
# Post의 필드에서 어떠한 것들을 정할 것인지
fields = ['title', 'hook_text', 'content', 'head_image', 'file_upload', 'category']
- 데이터를 저장할 모델을 지정한다.
- 사용할 폼 클래스를 지정
- 사용할 템플릿 파일의 경로를 지정한다. →
기본값 post_form.html
- 그 후에 success_url로 리다이렉션
- form_valid를 정의하지 않고, success_url을 명시하지 않으면 CreateView는 내부적으로 기본적인 동작을 수행한다.
✔️ 폼 데이터 유효성 검사
✔️ 모델 인스턴스 생성 : 폼 데이터가 유효하다면, 해당 데이터를 기반으로 모델 클래스의 인스턴스를 생성한다.
✔️ 데이터베이스에 저장 : 모델 인스턴스를 기반으로 데이터베이스에 저장
✔️ 리다이렉션 : 저장이 성공하면, CreateView는 기본적으로 해당 모델의 get_absolute_url 메서드를 호출하여 리다이렉션할 URL을 가져온다. 만약, 해당 메서드가 정의되어 있지 않은 경우 success_url이 url 요청을 보낸다.
✔️ 에러처리 : 만약 get_absolute_url 메소드도 없고, success_url이 명시되지 않은 경우에는 에러가 발생한다.
- 장고 템플릿에서
{{ form }}은 전체 폼을 렌더링 하기 위해 사용되는 템플릿 변수이다.
- 이 변수는 폼에 대한 HTML 마크업을 나타내며, 폼의 필드 / 레이블 / 입력 요소 그리고 관계된 에러나 유효성 검사 메시지 등이 포함된다.
- 보안을 위해 장고에서 제공해주는 기능, 봇에 의해 광고로 게시판이 덮어지지 않도록 함
- 올바르지 않은 방법으로 데이터가 전송되면 서버에서 발생한 csrf_token 값과 해커가 보낸 csrf_token 값이 일치하지 않으므로 오류를 발생시켜 보안을 유지할 수 있다.
csrf_token을 사용하려면 장고에 CsrfViewMiddleware라는 미들웨어를 추가해야 하지만, 이 미들웨어는 장고 프로젝트 생성 시 자동으로 'confing/settings.py'파일의 MIDDLEWARE라는 항목에 추가되기 때문에 직접 입력할 필요는 없다.(... 생략 ...) MIDDLEWARE = [ (... 생략 ...) 'django.middleware.csrf.CsrfViewMiddleware', (... 생략 ...) ] (... 생략 ...)