Django 에서 session 권한 관리 사용
이 파일 은 제 C:\\Users\\17764530215\\test\mysite 주소 에 있 습 니 다.
1.urls.py
from django.contrib import admin
from django.urls import path
from login import views
urlpatterns = [
path('admin/', admin.site.urls),
path('index/', views.index),
path('login/', views.login),
path('register/', views.register),
path('logout/', views.logout),
]
정책:
2.login/models.py
from django.db import models
# Create your models here.
class User(models.Model):
gender = (
('male', " "),
('female', " "),
)
name = models.CharField(max_length=128, unique=True)
password = models.CharField(max_length=256)
email = models.EmailField(unique=True)
sex = models.CharField(max_length=32, choices=gender, default=" ")
c_time = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.name
class Meta:
ordering = ["-c_time"]
verbose_name = " "
verbose_name_plural = " "
필드 별 의미:name:필수,최 장 128 자 를 초과 하지 않 으 며 유일 하 게 같은 이름 을 가 질 수 없습니다.password:필수,최 장 256 자 를 초과 하지 않 습 니 다.email:Django 에 내 장 된 메 일 형식 을 사용 하고 유일 합 니 다.섹스:성별,choice 를 사 용 했 습 니 다.남자 나 여자 만 선택 할 수 있 고 기본적으로 남자 입 니 다.사용str__방법 은 인성 화 된 대상 정 보 를 나타 내 는 데 도움 을 준다.메타 데이터 에서 사용자 가 생 성 시간의 역순 으로 배열 하 는 것 을 정의 합 니 다.즉,최근 에 가장 먼저 표 시 된 것 입 니 다.
3.views.login 과 login.html
views.login:
def login(request):
if request.session.get('is_login', None): #
return redirect('/index/')
if request.method == 'POST':
login_form = forms.UserForm(request.POST) # ,
message = ' !'
if login_form.is_valid():
username = login_form.cleaned_data.get('username')
password = login_form.cleaned_data.get('password')
try:
user = models.User.objects.get(name=username)
except :
message = ' !'
return render(request, 'login/login.html', locals())
if user.password == password: #
# session :
request.session['is_login'] = True #is_login=True
request.session['user_id'] = user.id
request.session['user_name'] = user.name
return redirect('/index/') #
else:
message = ' !'
return render(request, 'login/login.html', locals())
else:
return render(request, 'login/login.html', locals())
# POST , login.html
login_form = forms.UserForm()
return render(request, 'login/login.html', locals())
우 리 는 login 에 들 어 갈 때 session 에서 is 를 찾 습 니 다.login 항목,true 라면 로그 인 했 음 을 표시 하기 때문에/index/로 다시 설정 하여 첫 페이지 에 들 어 갑 니 다.false,즉 로그 인 하지 않 았 다 면 아래로 내 려 가세 요.POST 방법 이 라면 일련의 작업 을 수행 합 니 다.POST 가 아니라면 처음으로 GET 방식 으로 이 login 홈 페이지 에 로그 인 한 것 임 을 표시 합 니 다.forms.Userform 으로 대상 login 을 만 듭 니 다.form,이 를 매개 변수 로 login/login.html 템 플 릿 파일 에 전달 하고 잠시 후에 이 파일 을 소개 합 니 다.
만약 에 False 이 고 POST 일 때 양식 을 작성 했다 는 것 을 나타 내 는데 여 기 는 많은 업무 논리 와 session 의 관리 와 관련 되 고 중심 적 으로 말 합 니 다.하면,만약,만약...form.is_valid()는 다음 과 같 습 니 다:loginform=forms.Userform(request.POST)은 이 폼 데 이 터 를 작성 한 다음 데이터베이스 의 사용자 이름과 비밀 번 호 를 검증 합 니 다.통과 하면 request.session[islogin]트 루 로 변경 하여 로그 인 상 태 를 표시 하고 userid 와 username 필드 도 대응 하 는 데이터 로 바 뀌 었 습 니 다.이 다음 에 유용 할 것 입 니 다.
다음은 login/login.html 로 들 어 갑 니 다.
<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- meta * * , * * ! -->
<!-- Bootstrap CSS -->
<link href="https://cdn.bootcss.com/twitter-bootstrap/4.3.1/css/bootstrap.min.css" rel="stylesheet">
<title> </title>
</head>
<body>
<div class="container">
<div class="col">
<form class="form-login" action="/login/" method="post">
{% if message %}
<div class="alert alert-warning">{{ message }}</div>
{% endif %}
{% csrf_token %}
<h3 class="text-center"> </h3>
{{ login_form }}
<div>
<a href="/register/" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" class="text-success " ><ins> </ins></a>
<button type="submit" class="btn btn-primary float-right"> </button>
</div>
</form>
</div>
</div> <!-- /container -->
<!-- Optional JavaScript -->
<!-- jQuery first, then Popper.js, then Bootstrap JS -->
{# #}
<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.js"></script>
<script src="https://cdn.bootcss.com/popper.js/1.15.0/umd/popper.js"></script>
<script src="https://cdn.bootcss.com/twitter-bootstrap/4.3.1/js/bootstrap.min.js"></script>
</body>
</html>
여기 서 중요 한 것 은 이 문구 입 니 다.{loginform},이 위치 에 폼 login 을 삽입 하 였 습 니 다.form,그리고 이 양식 을 작성 한 후 view 안의 login 함수 로 login 을 실행 합 니 다.form=forms.Userform(request.POST)에서 작성 한 이 폼 데 이 터 를 가 져 온 다음 검사 등 을 수행 합 니 다.이 두 가지 가 있 으 면 우리 의 권한 관 리 는 기본적으로 완성 된다!본질 적 으로 이 두 가 지 는 입력 한 사용자 데이터 에 대해 session 에 존재 한 다음 에 검사 할 때 session 에서 꺼 내 합 법 적 인 사용자 인지 판단 할 수 있 는 메커니즘 을 제공 했다.그러면 우 리 는 index.html 를 다시 수정 하고 session 으로 검사 해 야 합 니 다.그러면 인터넷 주 소 를 통 해 직접 방문 하 는 사용 자 는 session 이 없 기 때문에 차단 당 합 니 다!
4.views.index
def index(request):
if not request.session.get('is_login', None): # , login
return redirect('/login/')
return render(request, 'login/index.html') # , index.html
로그 인 상태 가 아니라면 login 으로 다시 설정 합 니 다.로그 인 상태 에 있 으 면 실제 login/index.html 템 플 릿 으로 다시 설정 합 니 다.이 템 플 릿 에서 우 리 는 각종 기능 을 개발 할 수 있 습 니 다.이 demo 의 login/index/html 은 다음 과 같 습 니 다.
<!DOCTYPE html>
<!-- Optional JavaScript -->
<!-- jQuery first, then Popper.js, then Bootstrap JS -->
{# #}
<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.js"></script>
<script src="https://cdn.bootcss.com/popper.js/1.15.0/umd/popper.js"></script>
<script src="https://cdn.bootcss.com/twitter-bootstrap/4.3.1/js/bootstrap.min.js"></script>
</body>
</html>
여기 서 중요 한 것 은 이 문구 입 니 다.{loginform},이 위치 에 폼 login 을 삽입 하 였 습 니 다.form,그리고 이 양식 을 작성 한 후 view 안의 login 함수 로 login 을 실행 합 니 다.form=forms.Userform(request.POST)에서 작성 한 이 폼 데 이 터 를 가 져 오고 검사 하 는 등 작업 을 합 니 다.이 두 가지 가 있 으 면 우리 의 권한 관 리 는 기본적으로 완 료 됩 니 다!본질 적 으로 이 두 가 지 는 입력 한 사용자 데이터 에 대해 session 에 존재 한 다음 에 검사 할 때 session 에서 꺼 내 합 법 적 인 사용자 인지 판단 할 수 있 는 메커니즘 을 제공 했다.그러면 우 리 는 index.html 를 다시 수정 하고 session 으로 검사 해 야 합 니 다.그러면 인터넷 주 소 를 통 해 직접 방문 하 는 사용 자 는 session 이 없 기 때문에 차단 당 합 니 다!4.views.index
def index(request):
if not request.session.get('is_login', None): # , login
return redirect('/login/')
return render(request, 'login/index.html') # , index.html
로그 인 상태 가 아니라면 login 으로 다시 설정 합 니 다.로그 인 상태 에 있 으 면 실제 login/index.html 템 플 릿 으로 다시 설정 합 니 다.이 템 플 릿 에서 우 리 는 각종 기능 을 개발 할 수 있 습 니 다.이 demo 의 login/index/html 은 다음 과 같 습 니 다.
<html lang="en">
<head>
<meta charset="UTF-8">
<title> </title>
</head>
<body>
<h1>{{ request.session.user_name }}! !</h1>
<p>
<a href="/logout/"> </a>
</p>
</body>
</html>
마지막 으로 logout 의 실현 을 살 펴 보 겠 습 니 다.
5.views.logout
def logout(request): #
if not request.session.get('is_login', None): # ,
# ,
return redirect("/login/")
request.session.flush() # session
#
# del request.session['is_login']
# del request.session['user_id']
# del request.session['user_name']
return redirect("/login/") # login
로그 인하 지 않 으 면 직접/login/인터페이스 로 전환 합 니 다.로그 인 상태 라면 request.session.flush()를 통 해 session 을 비 운 다음/login/로그 인 인터페이스 로 다시 설정 해 야 합 니 다.6.세 션 과 forms 의 조합 정리
forms 는 html 에서 폼 과 대상 을 연결 하면 폼 을 작성 한 후에 forms 를 통 해 작성 한 내용 을 쉽게 찾 을 수 있 습 니 다.
session 은 사실 권한 검증 의 이기 입 니 다!session 이 없 을 때 사용 자 는 index 인터페이스 에 직접 방문 할 수 있 습 니 다.session 이 있 을 때 index 함수 의 처리 논 리 는 session 을 통 해 로그 인 여 부 를 판단 할 수 있 습 니 다.물론 이에 맞 춰 login,logout 등 함수 로 이 session 정 보 를 잘 유지 하고 불변성 을 확보 해 야 합 니 다.모든 session 중의 islogin 필드 가 True 일 때,모두 진정한 로그 인 사용자 입 니 다.
Django 의 session 권한 관리 사용 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.Django session 권한 관리 에 관 한 더 많은 내용 은 이전 글 을 검색 하거나 아래 글 을 계속 찾 아 보 세 요.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Django 라우팅 계층 URLconf 작용 및 원리 해석URL 구성(URLconf)은 Django가 지원하는 웹 사이트의 디렉토리와 같습니다.그것의 본질은 URL과 이 URL을 호출할 보기 함수 사이의 맵표입니다. 위의 예제에서는 URL의 값을 캡처하고 위치 매개 변수로...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.