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程序中进行文件读取和写入操作的教程
Apr 28 Python
python3批量删除豆瓣分组下的好友的实现代码
Jun 07 Python
Python  pip安装lxml出错的问题解决办法
Feb 10 Python
Python中shutil模块的学习笔记教程
Apr 04 Python
Python使用zip合并相邻列表项的方法示例
Mar 17 Python
详解TensorFlow查看ckpt中变量的几种方法
Jun 19 Python
python 常用的基础函数
Jul 10 Python
Python序列对象与String类型内置方法详解
Oct 22 Python
Python flask框架实现查询数据库并显示数据
Jun 04 Python
Python计算信息熵实例
Jun 18 Python
Python DataFrame使用drop_duplicates()函数去重(保留重复值,取重复值)
Jul 20 Python
如何用Python 实现全连接神经网络(Multi-layer Perceptron)
Oct 15 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
苏联队长,苏联超人蝙蝠侠,这些登场的“山寨”英雄真的很严肃
2020/04/09 欧美动漫
PHP中的函数-- foreach()的用法详解
2013/06/24 PHP
如何使用Gitblog和Markdown建自己的博客
2015/07/31 PHP
PHP利用imagick生成组合缩略图
2016/02/19 PHP
PHP设计模式之模板方法模式定义与用法详解
2018/04/02 PHP
如何用javascript去掉字符串里的所有空格
2007/02/08 Javascript
JQuery 国际象棋棋盘 实现代码
2009/06/26 Javascript
jQuery学习笔记 操作jQuery对象 文档处理
2012/09/19 Javascript
Javascript中call的两种用法实例
2013/12/13 Javascript
jQuery1.9.1源码分析系列(十六)ajax之ajax框架
2015/12/04 Javascript
laydate 显示结束时间不小于开始时间的实例
2017/08/11 Javascript
基于webpack-hot-middleware热加载相关错误的解决方法
2018/02/22 Javascript
如何使node也支持从url加载一个module详解
2018/06/05 Javascript
node.js调用C++函数的方法示例
2018/09/21 Javascript
vue-cli配置全局sass、less变量的方法
2019/06/06 Javascript
[08:29]DOTA2每周TOP10 精彩击杀集锦vol.7
2014/06/25 DOTA
[01:42]辉夜杯战队访谈宣传片—FANTUAN
2015/12/25 DOTA
Python中使用gzip模块压缩文件的简单教程
2015/04/08 Python
python对html代码进行escape编码的方法
2015/05/04 Python
星球大战与Python之间的那些事
2016/01/07 Python
Python实现HTTP协议下的文件下载方法总结
2016/04/20 Python
Diango + uwsgi + nginx项目部署的全过程(可外网访问)
2018/04/22 Python
python实现简单日期工具类
2019/04/24 Python
django项目简单调取百度翻译接口的方法
2019/08/06 Python
详解解决Python memory error的问题(四种解决方案)
2019/08/08 Python
python matplotlib折线图样式实现过程
2019/11/04 Python
python实现视频读取和转化图片
2019/12/10 Python
Python找出列表中出现次数最多的元素三种方式
2020/02/24 Python
Python 3.10 的首个 PEP 诞生,内置类型 zip() 迎来新特性(推荐)
2020/07/03 Python
农民入党思想汇报
2014/01/03 职场文书
保护环境倡议书100字
2014/05/19 职场文书
企业管理标语
2014/06/10 职场文书
护士求职简历自我评价
2015/03/10 职场文书
律政俏佳人观后感
2015/06/09 职场文书
工作后的感想
2015/08/07 职场文书
2016年大学生党员承诺书
2016/03/24 职场文书