duckracoon.tistory.com/44?category=1017083
Class Based View에 대해 이해하자.
views.py
class AccountCreateView(CreateView):
model = User
form_class = UserCreationForm
success_url = reverse_lazy('accountapp:hello_world')
template_name = 'accountapp/create.html'
1. 어떤 모델을 사용할건지 지정을해야하는데 장고기본제공모델인 User를 사용한다.
2. 다음으로는 이 User모델을 만드는데 필요한 form이 필요하다. 장고가 기본적인 form을 제공하는데
그게 UserCreationForm
3. 이 계정을 만드는데 성공을 했으면 어느 경로로 다시 재연결을 할 것인가라는걸 지정을 한다. 만든게 hello_world밖에 없으니까 거기로 우선 연결.
* 함수형뷰에서는 redirect를 할때 reverse()를 사용했는데 reverse_lazy()는 뭐가다른가? 불러오는 방식차이라서 class에서는 reverse_lazy()를 사용. reverse()를 쓰면 에러나 나타난다.
-> reverse()는 Function Based View에서 reverse_lazy()는 Class based View에서 사용한다. 이 정도로 우선 알아둔다.
4. 회원가입을 할때 볼 html 즉 template을 줘야한다.
urls.py
경로지정
from django.urls import path
from accountapp.views import hello_world, AccountCreateView
app_name = 'accountapp'
urlpatterns = [
path('hello_world/', hello_world, name='hello_world'),
path('create/', AccountCreateView.as_view(), name='create'),
]
path('create/', AccountCreateView.as_view(), name='create') 보면 함수형뷰 때랑 뭐가 다르냐면 .as_view()를 해줘야한다.
accountapp/templates/accountapp/create.html 생성
{% extends 'base.html'%}
{% block content %}
<div style="text-align: center;">
<form action="{% url 'accountapp:create' %}" method="post">
{% csrf_token %}
{{ form }}
<input type="submit" class="btn btn-primary">
</form>
</div>
{% endblock %}
회원가입 틀 만든다고 이름, 패스워드 등등 div태그 여러개 써서 만들고 할 필요없다.
{{ form }} 이 뭐냐면
view에서 form_class=UserCreatonForm 지정해줬는데 이 폼이 그대로 form html로 만들어준다.
대충 잘 나오는 것을 볼 수 있다.
'웹 프로그래밍' 카테고리의 다른 글
[pinterest clone (15)] form 디자인 (0) | 2021.04.28 |
---|---|
[pinterest clone (14)] Login / Logout 구현 (0) | 2021.04.27 |
Django가 CRUD로 유명한 이유 (0) | 2021.04.27 |
pycharm에서 서버 디버깅하는법 (디버깅 설정) (0) | 2021.04.27 |
[pinterest clone (12)] DB 정보 접근 (0) | 2021.04.27 |