ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • django login FBV
    Project 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 %}
      

    참고 자료

    소스 코드

    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

    댓글

Designed by Tistory.