[Django] CreateView / {{ form }} / {% csrf_token %}

형이·2023년 11월 14일
0

Python

목록 보기
34/34
post-thumbnail

📝 Django

🖥️ 1. CreateView

  • 새로운 화면을 만드는데 필요하다.
  • 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']

1-1. model = Post

  • 데이터를 저장할 모델을 지정한다.

1-2. fields

  • 사용할 폼 클래스를 지정

1-3. template_name

  • 사용할 템플릿 파일의 경로를 지정한다. → 기본값 post_form.html

1-4. success_url

  • 그 후에 success_url로 리다이렉션

1-5. form_valid()

  • form_valid를 정의하지 않고, success_url을 명시하지 않으면 CreateView는 내부적으로 기본적인 동작을 수행한다.

 ✔️ 폼 데이터 유효성 검사

 ✔️ 모델 인스턴스 생성 : 폼 데이터가 유효하다면, 해당 데이터를 기반으로 모델 클래스의 인스턴스를 생성한다.

 ✔️ 데이터베이스에 저장 : 모델 인스턴스를 기반으로 데이터베이스에 저장

 ✔️ 리다이렉션 : 저장이 성공하면, CreateView는 기본적으로 해당 모델의 get_absolute_url 메서드를 호출하여 리다이렉션할 URL을 가져온다. 만약, 해당 메서드가 정의되어 있지 않은 경우 success_url이 url 요청을 보낸다.

 ✔️ 에러처리 : 만약 get_absolute_url 메소드도 없고, success_url이 명시되지 않은 경우에는 에러가 발생한다.


🖥️ 2. {{ form }}

  • 장고 템플릿에서 {{ form }}은 전체 폼을 렌더링 하기 위해 사용되는 템플릿 변수이다.
  • 이 변수는 폼에 대한 HTML 마크업을 나타내며, 폼의 필드 / 레이블 / 입력 요소 그리고 관계된 에러나 유효성 검사 메시지 등이 포함된다.

🖥️ 3. {% csrf_token %}

  • 보안을 위해 장고에서 제공해주는 기능, 봇에 의해 광고로 게시판이 덮어지지 않도록 함
  • 올바르지 않은 방법으로 데이터가 전송되면 서버에서 발생한 csrf_token 값과 해커가 보낸 csrf_token 값이 일치하지 않으므로 오류를 발생시켜 보안을 유지할 수 있다.
  • csrf_token을 사용하려면 장고에 CsrfViewMiddleware라는 미들웨어를 추가해야 하지만, 이 미들웨어는 장고 프로젝트 생성 시 자동으로 'confing/settings.py'파일의 MIDDLEWARE라는 항목에 추가되기 때문에 직접 입력할 필요는 없다.
(... 생략 ...)
MIDDLEWARE = [
	(... 생략 ...)
    'django.middleware.csrf.CsrfViewMiddleware',
    (... 생략 ...)
]
(... 생략 ...)

0개의 댓글