[pinterest clone (13)] CreateView를 통한 회원가입 구현
웹 프로그래밍

[pinterest clone (13)] CreateView를 통한 회원가입 구현

728x90
반응형

duckracoon.tistory.com/44?category=1017083

 

Django가 CRUD로 유명한 이유

CRUD는 Create, Read, Update, Delete가 가능한 시스템을 이야기한다. 그리고 Django는 CRUD를 만드는데 있어 생산성이 탁월한 것으로 유명하다. 왜일까? Django는 CRUD에 View를 따로 제공한다. Create view, Rea..

duckracoon.tistory.com

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로 만들어준다.

 

대충 잘 나오는 것을 볼 수 있다.

728x90
반응형