Project using python/Cloning Airbnb
django Login CBV
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