"Django"제 N+1절 Django 자체 인증 시스템 - auth
앞에 쓰다
우리는 웹 사이트를 개발할 때 자주 웹 사이트의 사용자 시스템을 실현해야 한다.이때 우리는 사용자 등록, 사용자 로그인, 사용자 인증, 취소, 비밀번호 수정 등 일련의 기능을 실현해야 한다.만약 우리가 모두 스스로 실현한다면, 안 되는 것이 아니라, 단지 약간의 시간을 낭비할 뿐이다.Django는 사용자 인증 시스템 --> auth를 내장하고 기본적으로 auth 를 사용합니다사용자 테이블은 사용자의 데이터를 저장합니다.그럼 이 강력한 사용자 인증 시스템에 대해 알아보겠습니다.
auth 모듈
auth 가져오기
이 모듈을 사용하려면 먼저 그것을 가져와야 한다.
from django.contrib import auth
auth 모듈의 각종 방법
authenticate()
user = auth.authenticate(request, username="username", password="password")
login(HttpRequest, user)
from django.shortcuts import render, redirect
from django.contrib import auth
def my_login(request):
if request.method == "POST":
username = request.POST.get("username")
password = request.POST.get("password")
user = auth.authenticate(request, username=username, password=password)
if user:
auth.login(request, user)
# Redirect to a success page.
else:
# Return an "invalid login" error message.
return render(request, "login.html")
logout(request)
from django.authenticate import auth
def logout(request):
auth.logout(request)
# Redirect to a success page.
return redirect('/login/')
is_authenticated()
def login(request):
if not request.user.is_authenticated();
return redirect("%s?next=%s" % (settings.LOGIN_URL, requedt.path))
Django도 우리를 위해 이 상황에 사용할 장식기를 설계했다.login 참조required()
login_required()
from django.contrib.auth.decorators import login_required
@login_required
def index(request):
...
사용자가 로그인하지 않으면 Django의 기본 로그인 URL: 'accounts/login' 으로 이동하여 현재 방문 URL의 절대 경로를 전달합니다. (로그인이 성공하면 이 경로로 다시 지정됩니다.)
물론 settings에서 로그인할 URL을 사용자 정의할 수 있습니다.py 파일에 다음 코드 추가
LOGIN_URL = '/login/'
create_user()
from django.contrib.auth.models import User
user = User.objects.create_user(username=" ", password=" ", email=" ( )", ...)
create_superuser()
from django.contrib.auth.models import User
user = User.objects.create_superuser(username=" ", password=" ", email=" ", ...)
check_password(password)
ok = request.user.check_password(" ")
set_password(password)
request.user.set_password(" ")
request.user.save()
로그인, 암호 수정, 등록, 로그아웃 기능의 예
로그인:
def login(request):
if request.method == "POST":
username = request.POST.get("username")
password = request.POST.get("password")
user_obj = auth.authenticate(request, username=username, password=password)
if user_obj:
#
auth.login(request, user_obj)
next = request.GET.get("next")
if next:
return redirect(next)
return redirect('/index/')
return render(request, "login.html")
암호를 수정하려면 다음과 같이 하십시오.
@login_required
def set_password(request):
user = request.user
error_message = ""
if request.method == "POST":
old_password = request.POST.get("old_password") #
new_password = request.POST.get("new_password") #
repeat_password = request.POST.get("repeat_password") #
if user.check_password(old_password):
if not new_password:
error_message = " "
elif new_password != repeat_password:
error_message = " "
else:
user.set_password(new_password)
user.save()
return redirect('/login/')
else:
error_message = " "
return render(request, "set_password.html", {"error_message": erroe_message})
return render(request, "set_password.html")
등록:
def reg(request):
error_message = ""
if request.method == "POST":
username = request.POST.get("username")
password = request.POST.get("password")
repeat_password = request.POST.get("repeat_password")
if password:
if password != repeat_password:
error_message = " "
else:
User.objects.create_user(username=username, password=password)
return redirect('/login/')
else:
error_message = " "
return render(request, "reg.html")
로그아웃:
def logout(request):
auth.logout(request)
return redirect('/login/')
User 객체의 속성
from django.contrib.auth.models import AbstractUser
class UserInfo(AbstractUser):
nid = models.AutoField(primary_key=True)
phone = models.CharField(max_length=11, null=True, unique=True)
def __str__(self):
return self.username
주의: 내장된 auth 만 위의 방식으로 확장되었습니다.user표 이후로는 부족합니다. settings가 필요합니다.py 파일에서 Django에게 내가 정의한 UserInfo표를 사용하여 사용자 인증을 하고 있다고 알려 줍니다.settings에서.py에 다음 코드가 추가됩니다.
# Django User ,
AUTH_USER_MODEL = "app .UserInfo"
주의: 새로운 인증 시스템에 사용할 테이블을 지정하면 데이터베이스에 테이블을 다시 만들어야 합니다. 기본적인auth 를 계속 사용할 수 없습니다.user표입니다.
전재 대상:https://www.cnblogs.com/BlameKidd/p/11124044.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.