django中的auth详解
Auth模块是什么
Auth模块是Django自带的用户认证模块:
我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统。此时我们需要实现包括用户注册、用户登录、用户认证、注销、修改密码等功能,
Django它内置了强大的用户认证系统--auth,它默认使用 auth_user 表来存储用户数据。
1auth使用
1 在views导入auth模块
from django.contrib import auth
2 配置Mysql数据库,进行数据迁移
makemigration
migrate
3 创建超级用户
manage.py@author > createsuperuser Username (leave blank to use 'administrator'): lifujina Email address: 邮箱不用填 Password: 88888888li Password (again): 88888888li Superuser created successfully.
2 auth模块常用方法
1 认证用户
auth.authenticate(username=name,password=pwd)
在视图层
from django.shortcuts import render,HttpResponse
# Create your views here.
from django.contrib import auth
def login(request,*args,**kwargs):
if request.method == "GET":
return render(request,"login.html")
if request.method == "POST":
name = request.POST.get("name")
pwd = request.POST.get("pwd")
user = auth.authenticate(username=name,password=pwd) 认证密码和用户在数据库中
#username password 不能写成其他
if user:
return HttpResponse("登录成功")
return HttpResponse("登录失败")
前端
<body>
<form action="/login/" method="post">
<input type="text" name = "name">
<input type="password" name = "pwd">
<input type="submit" value="登录">
</form>
</body>
auth.authenticate (username=name,password=pwd)
认证用户名和密码是否存在
2 用户登录
auth.login(request, user)
user = auth.authenticate(username=name,password=pwd)
if user:
auth.login(request,user=user) 注意是俩个参数,一个是request,一个是登录的用户
#用户登录
#user 是当前认证通过的user
#会在生成一个随机字符串,并存在session中
return HttpResponse("登录成功")
return HttpResponse("登录失败")
3 获得当前登录用户
request.user
def login(request,*args,**kwargs): if request.method == "GET":
return render(request,"login.html") if request.method == "POST":
name = request.POST.get("name")
pwd = request.POST.get("pwd") user = auth.authenticate(username=name,password=pwd)
if user:
auth.login(request,user=user)
#用户登录
#user 是当前认证通过的user
#会在生成一个随机字符串,并存在session中
usr = request.user
#当前登录用户,但是一个要在登录后才能拿到,
如果没有登录显示匿名用户
request.user = AnonymousUser
#当前登录用户,不仅可以在后台能拿到,前台也能拿到
print(usr)
return HttpResponse("登录成功")
return HttpResponse("登录失败")
4 用户退出登录
logout(request)
def logout(request):
auth.logout(request) 一定注意有个request参数
相当于执行了:request.session.flush()
return redirect("/login/")
5 登录认证装饰器(控制用户,没有登录不能访问某个连接)
@login_required(redirect_field_name="eee",login_url="/login/")
导入 login_required模块
from django.contrib.auth.decorators import login_required
局部认证:(直接加在被认证的函数上面)
@login_required(redirect_field_name="eee",login_url="/login/")
redirect_field_name="eee", 修改路径上?后的key值
login_url=”/login/” 在没有登录的情况下,访问test要跳转的页面
def test(request,*args,**kwargs):
return render(request,"test.html")
全局认证:(在settings中配置)
LOGIN_URL = “/login/”只要没有登录的直接访问,跳到login页面
@login_required() 这里的参数就不用再写了
def test(request,*args,**kwargs):
return render(request,"test.html")
6 创建超级用户和普通用户
logout(request)
from django.contrib.auth.models import User 一定要导入
def register(request,*args,**kwargs):
name = 'egon'
pwd = "123" user = User.objects.create_user(username=name,password=pwd)
username password 不能写错
sup_user = User.objects.create_superuser(username=name,password = pwd) return HttpResponse("注册成功")
1 导入from django.contrib.auth.models import User 下的 User
2 创建普通用户 和 超级用户
7 校验密码是否正确(check_password(password)
check_password(password)
auth 提供的一个检查密码是否正确的方法,需要提供当前请求用户的密码。
密码正确返回True,否则返回False。
用法:
ok = user.check_password('密码')
def check_password(request,*args,**kwargs):
pwd = "123"#应该是前台将密码传过来 res = request.user.check_password(pwd)
#注意是校验当前登录用户的密码(request.user为当前登录用户)
if res:
return HttpResponse("OK")
return HttpResponse("密码错误")
8 修改密码
set_password(password)
auth 提供的一个修改密码的方法,接收 要设置的新密码 作为参数。
注意:设置完一定要调用用户对象的save方法!!!
def chang_password(request,*args,**kwargs): pwd = "123"
user = request.user #获得当前登录用户
user.set_password(pwd) #当前登录用户,调用 set_password(pwd) 修改密码的 方 法 pwd 为新密码
user.save() # 一定要记得保存 save() return HttpResponse("OK")
9 判断当前用户有没有登录
is_authenticated()
def user_pass(request,*args,**kwargs):
user = request.user.is_authenticated()
#requset.user为当前登录用户,如果登录了,user值为True
没登录 user 为False
print(user)
return HttpResponse("OK")
10 其他方法
request.user.is_staff() :
用户是否拥有网站的管理权限. (设为false 不能登录admin)
request.user.is_active() :
是否允许用户登录, 设置为 False,可以在不删除用户的前提下禁止用户登录。(设为false,用户还存在,但是不能登录,封号)
2 auth_user 增加自定义字段
1 自定义一个类 继承AbstractUser
from django.contrib.auth.models import AbstractUser class UserInfo(AbstractUser):
#继承了 AbstractUser(auth 中的 User 其实就是继承了AbstractUser )拥有父类的所有字段
phone = models.BigIntegerField(max_length=11,null=True) #并派生了 我们自己的 的 字段 sex = models.BooleanField()
#括号内 不能写null=True
#这个字段是布尔类型 0 就代表false 1 代表ture
2 在settings 中配置 AUTH_USER_MODEL
AUTH_USER_MODEL = "appo.UserInfo" #注意 是appo.UserInfo 而不是 appo.models.UserInfo #是字典的形式 这句话 意思 就是 以后的 AUTH_USER 就 用 appo.UserInfo
3 在要使用 UserInfo 的地方 导入 UserInfo
# from django.contrib.auth.models import User
from appo.models import UserInfo
def register(request,*args,**kwargs):
name = 'egon'
pwd = "123"
sex = 0 user = UserInfo.objects.create_user(username=name,password=pwd,sex=sex)
# sup_user = User.objects.create_superuser(username=name,password = pwd) return HttpResponse("注册成功")
注意: 这样数据库中就没有 auth_user这个表了,而是由userinfo取代了,以后凡是要用到User的地方 都用UserInfo 替代, auth 所具有的方法,使用方式一样
django中的auth详解的更多相关文章
- django中request对象详解(转载)
django中的request对象详解 Request 我们知道当URLconf文件匹配到用户输入的路径后,会调用对应的view函数,并将 HttpRequest对象 作为第一个参数传入该函数. ...
- django中models field详解
本文参考自:django官方文档models/field 在model中添加字段的格式一般为: field_name = field_type(**field_options) 一 field o ...
- django中的模型详解-1
在说明django模型之前,首先来说明一下django的生命周期,也就是一个请求到达django是如何处理的.[暂时不包含中间件] 浏览器的请求---->到达django中的urls中找到对应的 ...
- Django中的Ajax详解
AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步Javascript和XML”.即使用Javascript语言与服务器进行异步交互,传输的数据为XML(当 ...
- django中的filter详解
filter (数据过滤) 我们很少会一次性从数据库中取出所有的数据:通常都只针对一部分数据进行操作. 在Django API中,我们可以使用`` filter()`` 方法对数据进行过滤: > ...
- Django中model层详解
#!/usr/bin/env python# _*_ coding:utf-8 _*_ from django.db import models class UserType(models.Model ...
- Django框架 之 querySet详解
Django框架 之 querySet详解 浏览目录 可切片 可迭代 惰性查询 缓存机制 exists()与iterator()方法 QuerySet 可切片 使用Python 的切片语法来限制查询集 ...
- php中关于引用(&)详解
php中关于引用(&)详解 php的引用(就是在变量或者函数.对象等前面加上&符号) 在PHP 中引用的意思是:不同的变量名访问同一个变量内容. 与C语言中的指针是有差别的.C语言中的 ...
- JavaScript正则表达式详解(二)JavaScript中正则表达式函数详解
二.JavaScript中正则表达式函数详解(exec, test, match, replace, search, split) 1.使用正则表达式的方法去匹配查找字符串 1.1. exec方法详解 ...
随机推荐
- 在 Windows Server Container 中运行 Azure Storage Emulator(二):使用自定义的 SQL Server Instance
上一节,我们解决了 Azure Storage Emulator 自定义监听地址的问题,这远远不够,因为在我们 DEV/QA 环境有各自的 SQL Server Instance,我们需要将 ASE ...
- 深入剖析php执行原理(4):函数的调用
本章开始研究php中函数的调用和执行,先来看函数调用语句是如何被编译的. 我们前面的章节弄明白了函数体会被编译生成哪些zend_op指令,本章会研究函数调用语句会生成哪些zend_op指,等后面的章节 ...
- C语言基础笔试题一
1.下面的代码输出什么?为什么? void foo(void) { unsigned int a = 6; int b = -20; (a+b > 6)?puts(">6&quo ...
- Autorelease 性能测试
__weak NSString *string_weak_ = nil; - (void)viewDidLoad { [super viewDidLoad]; // 场景 1 NSString *st ...
- Spring JPA 主键
JPA主键生成器和主键生成策略 JPA中创建实体时,需要声明实体的主键及其主键生成策略.我们有一个实体类叫做Email,其主键上声明如下: @Id @Column(name = "EMAIL ...
- C# winform 数据库操作知识点总结(干货)
1.数据库连接及操作 在说数据库操作之前,先说一下数据库连接操作字符串的获取 首先,点击服务器资源管理器,接下来选中数据连接右键点击添加连接,填入你要连接的服务器名称,点击单选框使用SQL Serve ...
- Kali-linux使用Wifite破解无线网络
一些破解无线网络程序是使用Aircrack-ng工具集,并添加了一个图形界面或使用文本菜单的形式来破解无线网络.这使得用户使用它们更容易,而且不需要记住任何命令.本节将介绍使用命令行工具Wifite, ...
- OpenGL之位图的绘制和gluOrtho2D等函数详解
位图绘制 先来段代码吧: #include <iostream> #include <gl/glut.h> using namespace std; #pragma comme ...
- JDK(二)JDK1.8源码分析【排序】timsort
如无特殊说明,文中的代码均是JDK 1.8版本. 在JDK集合框架中描述过,JDK存储一组Object的集合框架是Collection.而针对Collection框架的一组操作集合体是Collecti ...
- Shell笔记-01
打开文本编辑器,新建一个文件,扩展名为sh(sh代表shell),扩展名并不影响脚本执行,见名知意就好,如果你用php写shell 脚本,扩展名就用php好了. 输入一些代码: #!/bin/bash ...