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方法详解 ...
随机推荐
- MVC controller的Action获取HttpRequest
HttpContext.ApplicationInstance.Context.Request
- Python学习---Django的基础学习
django实现流程 Django学习框架: #安装: pip3 install django 添加环境变量 #1 创建project django-ad ...
- 企业级Nginx基于虚拟主机别名的设置
生活中访问www.baidu.com和baidu.com是一个效果,同理也可以用rewrite 301跳转的思路(多发了一次请求过去)配置nginx.conf文件或者include里面的引用的文件,道 ...
- Linux命令--权限管理
chmod命令 Linux/Unix 的文件调用权限分为三级 : 文件拥有者.群组.其他.利用 chmod 可以藉以控制文件如何被他人所调用. 使用权限 : 所有使用者 语法 chmod [-cfvR ...
- Linux提权后获取敏感信息的方法与途径
在本文开始之前,我想指出我不是专家.据我所知,在这个庞大的区域,没有一个“神奇”的答案.分享,共享(我的出发点).下面是一个混合的命令做同样的事情,在不同的地方,或只是一个不同的眼光来看待事物.我知道 ...
- Pygame碰撞检测
学习自小甲鱼视频教学(笔记) 功能实现: 在随机位置生成若干个小球以随机速度运动: 若小球运动出左边界则从右边界进入,上下边界同理: 若两小球相碰撞则都以相反速度运动分开. 代码如下: 1.尝试自己写 ...
- Java基础知识强化之多线程笔记07:同步、异步、阻塞式、非阻塞式 的联系与区别
1. 同步: 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回.但是一旦调用返回,就必须先得到返回值了. 换句话话说,调用者主动等待这个"调用"的结果. 对于 ...
- 死磕salt系列-salt入门
saltstack简介 SaltStack是一种新型的基础设施管理软件,简单易部署,可伸缩的足以管理成千上万的服务器,和足够快的速度控制,与他们交流,以毫秒为单位.SaltStack提供了一个动态基础 ...
- Vue 子组件调用父组件 $emit
<!DOCTYPE html><html> <head> <meta charset="utf-8"> ...
- 修改jupyter notebook的默认路径
我的系统环境是win10,安装了anaconda3 for python 3.6.6首先需要配置notebook的变量环境:打开 cmd 输入命令 jupyter notebook --generat ...