장고 - 로그인 권한 부여방법
방법1. login_required 클래스 사용
- login_required 클래스를 사용하여 로그인이 필요한 부분에 @login_required 데코레이터를 사용한다.
- 경로 : (앱 이름) > views.py
1
2
3
4# login_required 클래스 호출
from django.contrib.auth.decorators import login_required
# login_required 데코레이터 사용
- 경로 : (앱 이름) > views.py
- 로그인 분기가 필요한 html 부분에 user.is_authenticated 함수를 사용한다.
- 경로 : layout > base.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{% block title %}{% endblock %}</title>
</head>
<body>
{% if user.is_authenticated %}
<a href="{% url 'account_logout' %}">Logout</a>
{% else %}
<a href="{% url 'account_login' %}">Login</a>
{% endif %}
{% block content %}
{% endblock %}
{% block extra_script %}
{% endblock %}
</body>
</html>
- 경로 : layout > base.html
방법2. 로그인 페이지 구현 및 LoginRequiredMixin 클래스 사용
로그인 페이지 html을 작성한다.
- 경로 : accounts(앱 이름) > templates > accounts > signin.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19{% extends 'base.html' %}
{% block title %}
{% endblock %}
{% block content %}
<div class="row">
<div class="col"></div>
<div class="col-6">
<div class="alert alert-primary">Please enter your login information.</div>
<form action="" method="post">
{% csrf_token %}
{{form.as_p}}
<input type="submit" value="Signin" class="btn btn-outline-primary">
</form>
</div>
<div class="col"></div>
</div>
{% endblock %}
- 경로 : accounts(앱 이름) > templates > accounts > signin.html
accounts 앱에서 로그인/로그아웃/회원가입 경로를 설정한다.
- 경로 : accounts(앱 이름) > urls.py
1
2
3path('signin/', LoginView.as_view(template_name='accounts/signin.html'), name='signin'),
path('signout/', LogoutView.as_view(template_name='accounts/signout.html'), name='signout'),
path('signup/', signup, name='signup'),
- 경로 : accounts(앱 이름) > urls.py
LoginRequiredMixin 클래스를 상속받아 첫 페이지에 로그인 페이지로 이동되도록 한다.
- 경로 : photo(앱 이름) > views.py
1
2
3
4
5
6from django.contrib.auth.mixins import LoginRequiredMixin
# --> 로그인을 했는지 안했는지 확인해주고 로그인 안했으면, 로그인 페이지로 이동시켜줌(경로 설정 필요)
class PhotoList(LoginRequiredMixin, ListView):
model = Photo
template_name = 'photo/photo_list.html'
- 경로 : photo(앱 이름) > views.py
로그인 페이지 url 경로를 설정해준다.
- 경로 : config(프로젝트명) > settings.py
1
2from django.urls import reverse_lazy
LOGIN_URL = reverse_lazy('accounts:signin')
- 경로 : config(프로젝트명) > settings.py
Posted