Django自带用户认证系统,这个系统支持访问控制、注册用户、关联创建者和内容等;在开发用户认证功能时的时候,可以使用django中的django.contrib.auth 中封裝了注册、认证,登录登出方法,可以直接使用;
相关表
在使用"python manage.py makemigrationss"和"python manage.py migrate"迁移完成数据库之后
根据配置文件settings.py中的数据库段生成的数据表中已经包含了6张进行认证的数据表,分别是
auth_user
auth_group
auth_group_permissions
auth_permission
auth_user_groups
auth_user_user_permissions
自带用户认证系统,进行用户认证的数据表为auth_user(用户的数据保存在这个表里)
一、登陆功能:
authenticate():提供了用户认证,即验证用户名以及密码是否正确,一般需要username和password两个关键字参数
如果通过认证,authenticate()函数会返回一个User对象。当我们试图登陆一个从数据库中直接取出来不经过authenticate()的User对象时会报错。
1.登陆 auth.authenticate(username=name值, password=password值)
2.验证用户名和密码 auth.login(request, user) 这个函数使用Django的session框架给某个已认证的用户附加上session_id信息。
from django.shortcuts import render,redirect,HttpResponse
from django.contrib.auth import authenticate,login
def auth_view(request):
username=request.POST.GET("usernmae") # 获取用户名
password=request.POST.GET("password") # 获取用户的密码
user=authenticate(username=username,password=password) # 验证用户名和密码,返回用户对象
if user: # 如果用户对象存在
login(request,user) # 用户登陆
return redirect("/index/")
else:
return HttpResponse("用户名或密码错误")
当用户登陆成功时,会生成一个sessionid保存在cookies中,可以在数据库django_session中查看,当用户访问其他页面时,可以通过sessionid判断用户是否已经登陆。
二、注册功能
django自带User模型,导入方法:from django.contrib.auth.models import User
User是auth模块中维护用户信息的关系模式,在数据库中被命名为auth_user,使用migrate会自动生成.
user对象
User对象属性:username,password为必填项
password用哈希算法保存到数据库中
is_staff:判断用户是否拥有网站的管理权限
is_active:判断是否允许用户登陆,设置为“False”时可以不用删除用户来禁止用户登陆
用create_user辅助函数创建用户
a、create_user创建用户
create_user是django封装好的用于创建用户的方法(注意使用该方法注册的用户才能处理密码明文存密文到数据库的问题),
创建方法:User.objects.create_user(username=name, password=password)此处的User是django中自带的User模型from django.contrib.auth.models import User
def regist(request):
name = request.POST.get('name')
password = request.POST.get('password')
User.objects.create_user(username=name, password=password)
三、退出登陆auth.logout(request)
这个函数接受一个HttpResponse对象,无返回值。当调用该函数时,当前请求的session信息全部被清除。即使当前用户没有登陆,调用该函数也不会报错。
def logout(request):
if request.method == 'GET':
auth.logout(request)
四、登陆态验证
login_required() 若在访问某页面时,需要确认用户登陆成功才能访问,可以在url中用login_required方法进行验证,如果登陆成功就执行,如果用户未登陆,自动跳转登陆页面。
a.login_requierd()装饰器
配置跳转路径,,当用户未登陆访问其他页面时,自动跳转到指定的url
url(r'^index/', login_required(views.index)),
url(r'^addstu/', login_required(views.addStu), name='astu'),
url(r'^stupage/', login_required(views.stuPage)),
值得注意的是,一旦加上login_required方法,在用户未登陆时访问页面会出现如下的404错误,所需还需要在setting.py进行配置LOGIN_URL。
user对象的login_requierd()装饰器
配置跳转路径,当用户未登陆访问其他页面时,自动跳转到登陆页面
LOGIN_URL = '/login/'
装饰器也可以加到view方法前
from django.contrib.auth.decorators import login_required
@login_required
def views(request):
pass
五、修改存储自定义认证中的User表
用户也可以不使用自带用户认证系统默认的数据表auth_user,通过以下方式可以将用户数据保存到自己定义的表中
from django.contrib.auth.models import User
class UserProfile(models.Model):
user = models.OneToOneField(User,on_delete=models.CASCADE) # django自带用户表User模块和自定义的用户关联
name = models.CharField(max_length=32)
def __str__(self):
return self.name
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持python博客。