Auth模块是Django自带的用户认证模块:

我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统。此时我们需要实现包括用户注册、用户登录、用户认证、注销、修改密码等功能,这还真是个麻烦的事情呢。

Django作为一个完美主义者的终极框架,当然也会想到用户的这些痛点。它内置了强大的用户认证系统--auth,它默认使用 auth_user 表来存储用户数据。

引用Django自带的User表,继承使用时需要设置

要在settings里面写一句,配置告诉程序用这个auth模块的表 : AUTH_USER_MODEL = "app名.UserInfo"

创建超级用户:createsuperuser

username: 用户名

email address: 可以不写

Password:设置密码

Password(again):确认密码

会向app名.UserInfo表里添加数据,密码时加密的

默认的auth模块下的userinfo表携带的字段

password 密码、last_login 上次登录、is_superuser 是否超级用户、username 用户名 、first_name 第一个用户、last_name最后一个用户名、is_staff 是否是员工、is_active 是否活跃、data_joinde 注册日期

模块下的方法

authenticate() 用户登陆认证模块

提供了用户认证功能,即验证用户名以及密码是否正确,一般需要username 、password两个关键字参数。

如果认证成功(用户名和密码正确有效),便会返回一个 User 对象。

authenticate()会在该 User 对象上设置一个属性来标识后端已经认证了该用户,且该信息在后续的登录过程中是需要的。

login()  快速将用户的登陆信息获取

该函数接受一个HttpRequest对象,以及一个经过认证的User对象。

该函数实现一个用户登录的功能。它本质上会在后端为该用户生成相关session数据。

PS:用户登陆了之后,调用login方法后,在视图下的任何函数里都可以获取用户的信息,如果用户没有登录,获取到的是匿名用户

logout(request)  #这里一定要传一个request对象

该函数接受一个HttpRequest对象,无返回值。

当调用该函数时,当前请求的session信息会全部清除。该用户即使没有登录,使用该函数也不会报错。

is_authenticated()

用来判断当前请求是否通过了认证

login_requierd()

auth 给我们提供的一个装饰器工具,用来快捷的给某个视图添加登录校验

create_user()  创建用户时候密码是自动加密的

auth 提供的一个创建新用户的方法,需要提供必要参数(username、password)等

create_superuser()

auth 提供的一个创建新的超级用户的方法,需要提供必要参数(username、password)等

check_password(password)   检查密码是否正确

auth 提供的一个检查密码是否正确的方法,需要提供当前请求用户的密码

密码正确返回True,否则返回False。

set_password(password)   修改密码

auth 提供的一个修改密码的方法,接收 要设置的新密码 作为参数。

注意:设置完一定要调用用户对象的save方法!!!

user.set_password(password='')
user.save(

User对象的属性

User对象属性:username, password

is_staff : 用户是否拥有网站的管理权限.

is_active : 是否允许用户登录, 设置为 False,可以在不删除用户的前提下禁止用户登录

auth模块实例

urls.py

from django.conf.urls import url
from django.contrib import admin
from app01 import views urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^auth_test/$',views.auth_test),
url(r'^order_new/$',views.order_new),
url(r'^userinfo_new/$', views.userinfo_new),
url(r'^auth_logout/$', views.auth_logout)
]

views.py

from django.shortcuts import render,HttpResponse

#auth组件
from django.contrib.auth import authenticate,login,logout #使用auth组件要导入authenticate这个模块
def auth_test(request):
'''这个是校验用户是否存在的'''
if request.method == 'GET':
return render(request,'login.html')
else:
name = request.POST.get('name')
pwd = request.POST.get('pwd')
user = authenticate(username=name,password=pwd) #authenticate这个方法就是将前端获取的用户名密码去匹配数据库中的数据,因为 UserInfo表里的密码时加密的,所以这个方法会在底层解密匹配
if user:
# 登陆成功后,调用这个login方法,会将user对象放入request里面,在视图函数里都能拿到user,也是往session里面写东西
login(request,user)
return HttpResponse('登陆成功')
else:
return HttpResponse('登陆失败') from django.contrib.auth.decorators import login_required #这个就是导入装饰器
from app01 import models @login_required(login_url='/auth_test/') #这个装饰器判断用户有没有登陆,需要传入参数,就是没有登录就重定向到一个地址,login_url就是重定向的地址
def order_new(request):
'''登陆之后在访问这个'''
print(request.user.username) #因为auth_test里面将拿到的user对象放入了request对象里,所以这里request可以调用user对象下的数据
return HttpResponse('我是订单页面,必须登陆才能看到') def userinfo_new(request):
'''这里也能拿到user对象'''
print(request.user.is_authenticated()) #如果用户登陆就是True,如果没登陆就是False
print(request.user.username)
models.UserInfo.objects.create_user(username='qqq',password='123',phone='1234567890') #直接用create_user创建用户
return HttpResponse('创建用户成功') def auth_logout(request):
logout(request) #清除session
return HttpResponse('退出成功')

login.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>登陆的页面</title>
</head>
<body>
<h1>基于cookie的登陆案例</h1>
<form action="" method="post">
<p>用户名: <input type="text" name="name"></p>
<p>密码: <input type="password" name="pwd"></p>
<p><input type="submit" value="登陆"></p>
</form>
</body>
</html>

settings.py

AUTH_USER_MODEL = "app01.UserInfo"  #一定要在settings的最后添加这一句

扩展默认的auth_user表

这内置的认证系统这么好用,但是auth_user表字段都是固定的那几个,我在项目中没法拿来直接使用啊!

比如,我想要加一个存储用户手机号的字段,怎么办?

聪明的你可能会想到新建另外一张表然后通过一对一和内置的auth_user表关联,这样虽然能满足要求但是有没有更好的实现方式呢?

答案是当然有了。

我们可以通过继承内置的 AbstractUser 类,来定义一个自己的Model类。

这样既能根据项目需求灵活的设计用户表,又能使用Django强大的认证系统了。

PS:按上面的方式扩展了内置的auth_user表之后,一定要在settings.py中告诉Django,我现在使用我新定义的UserInfo表来做用户认证。写法如下:

# 引用Django自带的User表,继承使用时需要设置
AUTH_USER_MODEL = "app名.UserInfo"

(30)auth模块(django自带的用户认证模块)的更多相关文章

  1. Django自带的用户认证

    1. 创建超级用户   python manage.py createsuperuser   2. 认证  校验用户名和密码  obj = auth.authenticate(request,user ...

  2. python2.0_day18_Django自带的用户认证模块的使用

    用户验证我们基于一个项目来学习利用Django框架中的user表实现用户认证Django练习小项目:学员管理系统设计开发 项目需求: 1.分讲师\学员\课程顾问角色, 2.学员可以属于多个班级,学员成 ...

  3. 6月29日学习总结 Django自带的用户认证

    Django自带的用户认证 我们在开发一个网站的时候,无可避免的要设计.实现网站的用户系统.此时我们需要实现包括但不限于用户注册.用户登录.用户认证.注销.修改密码等功能,这还真是个麻烦的事情呢. D ...

  4. Django自带的用户认证auth模块

    一.介绍 基本上在任何网站上,都无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册.用户登录.用户认证.注销.修改密码等功能. 使用Django,我们可以不需要自己写这些功能,因为Dj ...

  5. django自带的用户认证和form表单功能

    一.用户认证 1.用户认证方法 1.ajango自带用户认证功能,只需要引入相应的模块就可以使用,但是前提是必须使用ajango自带的auth_user表,并且需要把用户相关信息存放在该表中. 2.引 ...

  6. 基于 django 自带的用户认证进行用户认证

    django admin 默认已经存在了一个用户认证,这个时候可以偷个小懒,直接用 django 自带的,就不需要自己写用户认证了 1.目录结构: 2.代码 在 settings.py 中添加一行 # ...

  7. Django之auth模块用户认证模块

    一.Auth模块 1)auth模块是什么.登录后台使用的账号密码,则就是使用的auth模块创建的表 Auth模块是Django自带的用户认证模块: 我们在开发一个网站的时候,无可避免的需要设计实现网站 ...

  8. Python第十三天 django 1.6 导入模板 定义数据模型 访问数据库 GET和POST方法 SimpleCMDB项目 urllib模块 urllib2模块 httplib模块 django和web服务器整合 wsgi模块 gunicorn模块

    Python第十三天   django 1.6   导入模板   定义数据模型   访问数据库   GET和POST方法    SimpleCMDB项目   urllib模块   urllib2模块 ...

  9. Django (auth模块、User对象、用户认证、线上-用户认证)

    一.auth模块 django.contrib.auth中提供了许多方法,这里主要介绍其中的三个: authenticate()    提供了用户认证,即验证用户名以及密码是否正确,一般需要usern ...

随机推荐

  1. vue+vux scrollTop无法实现定位到具体dom

    先看一下最终的运行效果. 项目背景介绍:技术栈: vue+vux+nodejs需求:对汽车品牌列表可以按照字母进行索引定位 在开发中实现这种需求,心想还不是小菜一碟,作为一个饱经bug的程序员,别的我 ...

  2. @JsonSerialize的使用

    实际开发中,我们一定遇到过这样的问题:前端显示和后台存储数据单位不统一,而且各有各自的理由,统一不了,那就转换吧. 每次返回给前端时再转换一遍,返回给前端的json数据,在后端里定义的往往是一个对象, ...

  3. 【七】jquery之属性attr、 removeAttr、prop[全选全不选及反选]

    全选全不选 界面: 代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> ...

  4. 使用python内置库pytesseract实现图片验证码的识别

    环境准备: 1.安装Tesseract模块 git文档地址:https://digi.bib.uni-mannheim.de/tesseract/ 下载后就是一个exe安装包,直接右击安装即可,安装完 ...

  5. Linux 环境下jmeter 安装和配置

    1. 下载和安装JDK vim /etc/profile export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_92 export JRE_HOME=$JAVA_HOME/jr ...

  6. Rancher2.0中邮件通知的设置

    1-邮件通知的设置-中国电信189邮箱 2-2-邮件通知的设置-腾讯免费企业邮箱 **说明:网易163邮箱.QQ邮箱没有设置成功,可能是因为邮箱设置得太安全的缘故.   参考链接: 中国电信189邮箱 ...

  7. 巧用同步请求处理react页面刷新问题

    很多时候,我们会遇到这种情况,组件加载需要请求后台数据,然后填充组件.那么我们一般会这样处理:如[使用异步请求的方式]代码: 加载组价的时候,未获得数据,render一个空的div: 然后异步请求数据 ...

  8. spring 配置Value常量(不支持到static上)

    spring 配置Value常量(不支持到static上) 看代码吧,语言表达有问题. package com.variflight.xzair.rest.constant; import org.s ...

  9. koa和express对比

    不同: 1.启动方式不同 koa采用了new Koa()的方式,而express采用传统的函数形式 2.中间件形式二者不一样,这是由二者处理中间件的逻辑差异导致的,实际上这也是二者最根本的差别 3.k ...

  10. django学习之——Model

    打开 settings.py 找到 DATABASE  配置我们的数据库,(MySQL) # Database # https://docs.djangoproject.com/en/1.7/ref/ ...