基于Django的auth认证系统,你写一个项目时,当你需要判断 用户是否登录,是否有权限直接访问你的网站,还是需要登录才有权限访问,这些东西都是基于一个cookie或者session的。系统通过判断你浏览器端 是否携带认证的信息,从而给你赋予什么样的权限(现在也有一个什么缓存登录的,你们也可以去了解一下)。但是cookie或者session的话,你是不是要自己写一个cookie或者session啊。你自己写的话一大段代码不说,而且考虑的没那么全面。但是Django已经替你想到了,留了一个auth认证系统。
这样你就省去了一大堆麻烦事了。
这里我先写一个二的篇章,因为突然想写一个,但是又没有使用默认的auth_user表,而是自己写过一个表,所以这是一个进阶一样的东西吧!后面有时间我会写一个直接使用Django自带的auth_user表的认证使用的。、
你不使用auth_user表的话你就要自己写一个表在models里面了:
from django.db import models
from django.contrib.auth.models import AbstractUser
# Create your models here.
class UserInfo(AbstractUser): # UserInfo 必须继承于AbstractUser.你可以去看看里面有什么字段。
phone = models.CharField(max_length=11, null=True, unique=True)
写了一个表后,还要告诉Django,你使用了自己的表没有使用它自己带的auth_user表。所以还要在settings里面加一行设置:
AUTH_USER_MODEL = 'users.UserInfo' # AUTH_USER_MODEL这个是固定的写法,后面的user是指的你自己在哪个app写的models UserInfo是指你创建的表的名字。
接下来就是要在数据库里面生成你需要的表了,
使用
makemigrations,再使用migrate生成你的表。
写完这些,你就可以使用auth了。
views中使用
from django.shortcuts import render, HttpResponse, redirect
from django.contrib import auth # 导入auth认证模块
from users.models import UserInfo # 导入你的UserInfo表
from django.views import View
# 登录
class Login1(View):
def get(self, request):
return render(request, 'login.html')
def post(self, request):
# 获取post的email字段,这是用户名(email)和获取pwd
name = request.POST.get('email')
pwd = request.POST.get('pwd')
# 使用auth匹配是否正确
user = auth.authenticate(username=name, password=pwd)
if user:
# 这是把session储存到数据库中,以便下次验证是否登录
auth.login(request, user)
return redirect("/users/user_list/")
# 注册
class Reg(View):
def get(self, request):
return render(request, 'regster.html')
def post(self, request):
name = request.POST.get('email')
pwd = request.POST.get('pwd')
repwd = request.POST.get('repwd')
# 进行判断输入的两次密码是否一致
if pwd == repwd:
# 使用auth 的create_user方法进行创建数据进去数据库。
UserInfo.objects.create_user(username=name, password=pwd, email=None)
return HttpResponse("注册成功")
else:
return HttpResponse("请检查你的输入!!!")
# 一个测试页面而已
class UsesrList(View):
def get(self, request):
user = request.user.username
if not user:
return render(request, 'login.html')
return render(request, 'user_list.html')
class Logout(View):
def get(self, request):
# 使用 auth的 auth.logout(request)方法删掉session。本质上就上使用request.session.flush()删除方法,只是多了一些判断而已
auth.logout(request)
return redirect("/users/login1/")
这是auth使用了。
有什么不懂可以留言,因为这只是大概写了一下而已。