Cog Factory 2021. 3. 2. 11:42

url 설정

config/urls.py

urlpatterns = [
    path("users", include("users.urls", namespace="users")),
]

users/urls.py

from django.urls import path
from . import views

app_name = "users"

urlpatterns = [path("login/", views.LoginView.as_view(), name="login")]

 

{% url %}

  url template tag를 이용해서 signup page로 갈 수 있게 한다. {% url 'users:login' %}은 /users/login과 같다.

CBV(Class Based View)

users/views.py

  CBV는 django에서 정의한 여러가지 View들을 이용한다. 그 중 FormView를 이용해서 login page를 작성한다. login page는 여러 가지 attribute와 funciton이 있다.

  • form_class : forms.ModelForm을 상속하는 class로 초기화 한다.
  • success_url : signup이 성공했을 때 redirect될 url이다.
  • template_name : rendering할 template이다.
  • def from_valid() : form의 유효성을 검사한다.
from django.contrib.auth import authenticate, login
from django.views.generic import UpdateView
from . import forms


class LoginView(FormView):

    """ Login View """

    form_class = forms.LoginForm
    success_url = reverse_lazy("core:home")
    template_name = "pages/users/login.html"

    def form_valid(self, form):
        email = form.cleaned_data.get("email")
        password = form.cleaned_data.get("password")
        user = authenticate(self.request, username=email, password=password)
        if user is None:
            return redirect(reverse("users:login"))
        login(self.request, user)
        return super().form_valid(form)

참고 자료

  • 노마드 코더의 Airbnb 클론 강의
  • FormView

소스 코드

github.com/zpskek/airbnb-clone-v3/commit/1e015631a73a02d2cb32e9546c4cf3e943238c3f