[Django] 장고 Forms를 활용한 효율적인 데이터 유효성 검사 및 저장#3

아직·2022년 7월 8일
0
post-thumbnail

1)

validator는 되도록 모델에 정의하고, 모델-폼을 만들 때 자연스럽게 가져오는 것이 좋다.

2)

validator는 필드 값을 변경할 수 없으므로 보다 고압적이고, clean은 값을 변경할 수 있고 일회성 검사나 필드 값 변경을 허용하기 때문에 보다 유연하다.

3)

<div class="container">
            <div class="row">
                <div class="col-sm-12">
                    {% if messages %}
                        <div class="messages">
                        {% for message in messages %}
                            <div class="alert alert-info">  
                                {{ message.message }}
                            </div>
                        {% endfor %}
                        </div>

템플릿에서 사용하는 값은 보통 views.py에서 렌더 시에 값을 지정해줬으나, message는 해당 사항이 없다.

settings.py의 TEMPLATES에서 확인할 수 있는 contect_processors는 템플릿에서 사용할 변수 목록을, 매번 views.py에서 모두 지정해주긴 번거로우니, 디폴트로 사전 형태로 반환(return)하는 함수들의 모음이다.

4)
Input

class PostDeleteView(LoginRequiredMixin, DeleteView):
    model = Post
    success_url = reverse('instagram:post_list')
    # success_url = reverse_lazy('instagram:post_list')

    # def get_success_url(self):
    #     return reverse('instagram:post_list')

Output

File "C:\Users\ukyanjo\.conda\envs\askcompany\lib\site-packages\django\urls\resolvers.py", line 706, in url_patterns
  raise ImproperlyConfigured(msg.format(name=self.urlconf_name)) from e
django.core.exceptions.ImproperlyConfigured: The included URLconf 'askcompany.urls' does not appear to have any patterns in it. If you see the 'urlpatterns' variable with valid patterns in the file then the issue is probably caused by a circular import.

장고 프로젝트가 초기화되기 전, 파이썬 소스 코드가 임포트될 때 success_url가 실행된다. 반면 url reverse는 프로젝트가 로딩되고 나서 url 목록을 확인한 후에 실행될 수 있기 때문에 에러가 발생한다.

반면, reverse_lazy나 함수 코딩에서는 get_success_url 함수가 필요할 때 reverse가 호출된다.

0개의 댓글