Django自带用户认证系统使用方法解析


Posted in Python onNovember 12, 2020

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自带用户认证系统使用方法解析

Django自带用户认证系统使用方法解析

二、注册功能

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()装饰器

Django自带用户认证系统使用方法解析

配置跳转路径,当用户未登陆访问其他页面时,自动跳转到登陆页面

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 相关文章推荐
详解Python函数可变参数定义及其参数传递方式
Aug 02 Python
简单的python协同过滤程序实例代码
Jan 31 Python
Python在groupby分组后提取指定位置记录方法
Apr 20 Python
Django跨域请求问题的解决方法示例
Jun 16 Python
python画图把时间作为横坐标的方法
Jul 07 Python
Django框架静态文件使用/中间件/禁用ip功能实例详解
Jul 22 Python
elasticsearch python 查询的两种方法
Aug 04 Python
Django应用程序入口WSGIHandler源码解析
Aug 05 Python
Python3离线安装Requests模块问题
Oct 13 Python
keras分类模型中的输入数据与标签的维度实例
Jul 03 Python
Python+Opencv实现把图片、视频互转的示例
Dec 17 Python
python 制作磁力搜索工具
Mar 04 Python
Django多数据库联用实现方法解析
Nov 12 #Python
Django数据库迁移常见使用方法
Nov 12 #Python
python爬虫中PhantomJS加载页面的实例方法
Nov 12 #Python
python调用win32接口进行截图的示例
Nov 11 #Python
python 下载m3u8视频的示例代码
Nov 11 #Python
pytorch简介
Nov 11 #Python
Python远程linux执行命令实现
Nov 11 #Python
You might like
php 防止单引号,双引号在接受页面转义
2008/07/10 PHP
PHP程序员面试 切忌急功近利(更需要注重以后的发展)
2010/09/01 PHP
php实现curl模拟ftp上传的方法
2015/07/29 PHP
php生成复杂验证码(倾斜,正弦干扰线,黏贴,旋转)
2018/03/12 PHP
laravel批量生成假数据的方法
2019/10/09 PHP
两个JavaScript jsFiddle JSBin在线调试器
2010/03/14 Javascript
jQuery中读取json文件示例代码
2013/05/10 Javascript
用jQuery获取IE9下拉框默认值问题探讨
2013/07/22 Javascript
浏览器图片选择预览、旋转、批量上传的JS代码实现
2013/12/04 Javascript
javascript中文本框中输入法切换的问题
2013/12/10 Javascript
javascript实现限制上传文件大小
2015/02/06 Javascript
JavaScript中指定函数名称的相关方法
2015/06/04 Javascript
JavaScript多并发问题如何处理
2015/10/28 Javascript
javascript 中null和undefined区分和比较
2017/04/19 Javascript
简单的Vue异步组件实例Demo
2017/12/27 Javascript
几个你不知道的技巧助你写出更优雅的vue.js代码
2018/06/11 Javascript
JS apply用法总结和使用场景实例分析
2020/03/14 Javascript
Array.filter中如何正确使用Async
2020/11/04 Javascript
JS相册图片抖动放大展示效果的示例代码
2021/01/29 Javascript
[04:04]显微镜下的DOTA2第六期——电影级别的华丽团战
2014/06/20 DOTA
[46:14]完美世界DOTA2联赛PWL S3 Magma vs INK ICE 第一场 12.11
2020/12/16 DOTA
python使用正则表达式检测密码强度源码分享
2014/06/11 Python
Python实现SVN的目录周期性备份实例
2015/07/17 Python
python判断字符串编码的简单实现方法(使用chardet)
2016/07/01 Python
Python Handler处理器和自定义Opener原理详解
2020/03/05 Python
python 删除系统中的文件(按时间,大小,扩展名)
2020/11/19 Python
html5 worker 实例(一) 为什么测试不到效果
2013/06/24 HTML / CSS
解决html5中的video标签ios系统中无法播放使用的问题
2020/08/10 HTML / CSS
致长跑运动员广播稿
2014/01/31 职场文书
大学生创业策划书
2014/02/02 职场文书
代理班主任的自我评价
2014/02/04 职场文书
食品科学与工程专业毕业生求职信范文
2014/07/21 职场文书
领导干部保密承诺书
2014/08/30 职场文书
2016继续教育研修日志
2015/11/13 职场文书
小学生必读成语故事大全:送给暑假的你们
2019/07/09 职场文书
解决thinkphp6(tp6)在状态码500下不报错,或者显示错误“Malformed UTF-8 characters”的问题
2021/04/01 PHP