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打包文件夹的方法小结(zip,tar,tar.gz等)
Sep 18 Python
Python3结合Dlib实现人脸识别和剪切
Jan 24 Python
Python模拟随机游走图形效果示例
Feb 06 Python
unittest+coverage单元测试代码覆盖操作实例详解
Apr 04 Python
使用python-pptx包批量修改ppt格式的实现
Feb 14 Python
python使用pandas抽样训练数据中某个类别实例
Feb 28 Python
解析pip安装第三方库但PyCharm中却无法识别的问题及PyCharm安装第三方库的方法教程
Mar 10 Python
Python+Appium实现自动化测试的使用步骤
Mar 24 Python
django执行数据库查询之后实现返回的结果集转json
Mar 31 Python
Python requests.post方法中data与json参数区别详解
Apr 30 Python
python3.4中清屏的处理方法
Jul 06 Python
使用python实现学生信息管理系统
Feb 25 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下escape解码函数的实现方法
2010/08/08 PHP
PHP对象Object的概念 介绍
2012/06/14 PHP
php中jQuery插件autocomplate的简单使用笔记
2012/06/14 PHP
CodeIgniter辅助之第三方类库third_party用法分析
2016/01/20 PHP
php获取访问者浏览页面的浏览器类型
2017/01/23 PHP
Yii框架实现多数据库配置和操作的方法
2017/05/25 PHP
PHP对称加密算法(DES/AES)类的实现代码
2017/11/14 PHP
PHP耦合设计模式实例分析
2018/08/08 PHP
js 表格隔行颜色
2009/12/02 Javascript
Safari5中alert的无限循环BUG
2011/04/07 Javascript
深入理解JavaScript系列(38):设计模式之职责链模式详解
2015/03/04 Javascript
jQuery插件Zclip实现完美兼容个浏览器点击复制内容到剪贴板
2015/04/30 Javascript
精彩的Bootstrap案例分享 重点在注释!(选项卡、栅格布局)
2016/07/01 Javascript
AngularJS基础 ng-show 指令简单示例
2016/08/03 Javascript
微信小程序 开发工具快捷键整理
2016/10/31 Javascript
详解VueJs异步动态加载块
2017/03/09 Javascript
Vue 按键修饰符处理事件的方法
2018/05/04 Javascript
Angular中sweetalert弹框的基本使用教程
2018/07/22 Javascript
详解mpvue开发小程序小总结
2018/07/25 Javascript
JavaScript在web自动化测试中的作用示例详解
2019/08/25 Javascript
[28:28]Ti4 冒泡赛第二天NEWBEE vs NaVi 2
2014/07/15 DOTA
[46:55]Ti4 冒泡赛第二轮 LGD vs C9
2014/07/14 DOTA
python用ConfigObj读写配置文件的实现代码
2013/03/04 Python
python UNIX_TIMESTAMP时间处理方法分析
2016/04/18 Python
Python 迭代器工具包【推荐】
2016/05/06 Python
在python中以相同顺序shuffle两个list的方法
2018/12/13 Python
西班牙在线宠物商店:zooplus.es
2017/02/24 全球购物
管理专员自荐信
2014/01/26 职场文书
贷款委托书范本
2014/04/08 职场文书
《夕阳真美》教学反思
2014/04/27 职场文书
捐献物资倡议书范文
2014/05/19 职场文书
公司感谢信范文
2015/01/22 职场文书
保险内勤岗位职责
2015/04/13 职场文书
html2 canvas svg不能识别的解决方案
2021/06/03 HTML / CSS
Vue OpenLayer 为地图绘制风场效果
2022/04/24 Vue.js
Python编写车票订购系统 Python实现快递收费系统
2022/08/14 Python