본문 바로가기
장고

[ Django ] 내장 인증

by 자동매매 2023. 5. 3.

새 프로젝트를 만들 때마다 기본적으로 Django는 다음을 포함하는 User 객체를 제공하는 auth 앱을  설치합니다  .

  • username
  • password
  • email
  • first_name
  • last_name

User 개체를 사용하여 블로그 애플리케이션에서 log in, log out, sign up 을 구현합니다.

 

준비 작업

1. (default)저장 폴더 생성 - 반드시 이 위치에 생성

templates/registration

 

2. config/settings.py 에 Login, Logout redirect url 지정

LOGIN_REDIRECT_URL = 'home'
LOGOUT_REDIRECT_URL = 'home'

 

3. 사용 base.html  - 로그인 상태에 따른 상태 표시

project / templates / pybo /base.html

{% load static %}

<html>

<head>
  <title>Django blog</title>
  <link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:400" rel="stylesheet">
  <link href="{% static 'base.css' %}" rel="stylesheet">
</head>
<body>
  <header>
    <div class="nav-left">
      <h1><a href="{% url 'pybo:home' %}">Django blog</a></h1>
    </div>
    <div class="nav-right">
      <a href="{% url 'pybo:article_new' %}">+ New Blog Post</a>
    </div>
  </header>
  
  <!-- 로그인 상태에 따른 표시 내역 지정-->
  <div>
    {% if user.is_authenticated %}
      <p>Hi {{ user.username }}!</p>
      <p><a href="{% url 'logout' %}">Log out</a></p>
    {% else %}
      <p>You are not logged in.</p>
      <a href="{% url 'login' %}">Log In</a>
    {% endif %}
  </div>

  <div>
    {% block content %}
    {% endblock content %}
  </div>
</body>

</html>

 

Log In / Logout

1. config/urls.py 에 주소 추가

path('accounts/', include('django.contrib.auth.urls')),

 

2. login 템플릿 생성

templates/registration/login.html

{% extends 'pages/base.html' %}

{% block content %}
    <h2>Log In</h2>
    <form method="post">{% csrf_token %}
        {{ form.as_p }}
        <button type="submit">Log In</button>
    </form>
{% endblock content %}

 

3. 접속 확인

Login : http://127.0.0.1:8000/accounts/login/

Logout : http://127.0.0.1:8000/accounts/logout/

 

Sign up

1. accounts app설치

python manage.py startapp accounts

 

2. config/settings.py 에 앱 등록

INSTALLED_APPS = [
    "accounts.apps.AccountsConfig",  
]

 

3. 주소 매핑

 

1) config/urls.py 에서   다음 추가

urlpatterns = [
        path('accounts/', include('accounts.urls')),  
]

 

2) accounts/urls.py 에서

from django.urls import path
from .views import SignUpView
urlpatterns = [
    path('signup/', SignUpView.as_view(), name='signup'),
]

 

4. view 설정

accounts / views.py

from django.contrib.auth.forms import UserCreationForm
from django.urls import reverse_lazy
from django.views import generic


class SignUpView(generic.CreateView):
    form_class = UserCreationForm 
    # 모든 일반 클래스 기반 뷰의 경우 파일을 가져올 때 URL이 로드되지 않기 때문에 
    # 나중에 사용할 수 있을 때 URL을 로드하기 위해 지연 형식의 reverse를 사용
    success_url = reverse_lazy('login') 
    template_name = 'registration/signup.html'

 

5. template 생성

templates/registration/signup.html

{% extends 'pybo/base.html' %}

{% block content %}
    <h2>Sign up</h2>
    <form method="post">{% csrf_token %}
        {{ form.as_p }}
        <button type="submit">Sign up</button>
    </form>
{% endblock content %}

 

5. 접속 확인

http://127.0.0.1:8000/accounts/signup/

 

[ 흐름도 ]

Signup (view 에서 설정: sucess_url)  >  Login (settings.py의 LOGIN_REDIRECT_URL = 'home')  > Home

'장고' 카테고리의 다른 글

[ Django ] 기타 설정  (0) 2023.05.03
[ Django ] django Views  (0) 2023.05.02
[ Django ] Index  (0) 2023.05.02
App생성  (0) 2023.04.12

댓글