새 프로젝트를 만들 때마다 기본적으로 Django는 다음을 포함하는 User 객체를 제공하는 auth 앱을 설치합니다 .
- username
- password
- 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 |
댓글