-
django login FBVProject using python/Cloning Airbnb 2021. 3. 2. 07:04
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, name="login")]
{% url %}
url template tag를 이용해서 signup page로 갈 수 있게 한다. {% url 'users:login' %}은 /users/login과 같다.
FBV(Function Based View)
users/views.py
FBV에서는 if 문으로 GET method 요청이 왔을 때와 POST method 요청이 왔을 때를 구분한다. GET은 page를 보여주고 POST는 client로부터 온 data를 처리한다.
authenticate는 username과 password가 일치할 때 user를 반환하고 그렇지 않으면 None을 반환한다.
from django.shortcuts import render, redirect, reverse from django.contrib.auth import authenticate, login def loginView(request): if request.method == "GET": return render(request, "pages/users/login.html") elif request.method == "POST": email = request.POST.get("email") password = request.POST.get("password") user = authenticate(request, username=email, password=password) if user is None: return redirect(reverse("users:login")) login(request, user) return redirect(reverse("core:home"))
templates
pages/users/signup.html
<form> tag에 enctype="multipart/form-data" attribute가 있다. django가 file을 업로드할 때 사용하는 속성이다. views.py에서는 request.FILES.get()으로 업로드하는 file에 접근할 수 있다.
{% csrf_token %}은 csrf 공격을 막기 위한 token이다. django는 보안이 뛰어나기 때문에 {% csrf_token %} tag를 사용하지 않으면 submit이 안 된다. csrf 공격의 보안은 절대 client를 신뢰하지 않는 것으로 시작한다. 즉, 이 token 값을 가지지 않은 브라우저 요청은 받아들이지 않는다.
{% extends 'base.html' %} {% block page_title %} Login {% endblock page_title %} {% block search-bar %} <div></div> {% endblock search-bar %} {% block content %} <div class="background"> <div class="wrap"> <form action="{% url 'users:login' %}" method="post" class="form"> {% csrf_token %} <div class="form_input rounded-tl-lg rounded-tr-lg"> <input type="email" name="email" placeholder="Email" required class="w-full" maxlength="254" id="id_email"> </div> <div class="form_input rounded-bl-lg rounded-br-lg"> <input type="password" name="password" placeholder="Password" required id="id_password"> </div> <button class="form_button">Submit</button> </form> </div> </div> {% endblock content %}
참고 자료
- 노마드 코더의 Airbnb 클론 강의
- login
- file upload
- {% csrf_token %}
소스 코드
github.com/zpskek/airbnb-clone-v3/commit/87846809cce13a167d8e2305b4dcf3ad858ca845
'Project using python > Cloning Airbnb' 카테고리의 다른 글
django Login CBV (0) 2021.03.02 django login FBV using forms.py (0) 2021.03.02 django signup CBV (0) 2021.03.01 django signup FBV using forms.py (0) 2021.03.01 django signup FBV (0) 2021.03.01