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方法详解 ...
随机推荐
- Docker-容器数据卷
docker容器数据卷相当于外置的移动硬盘 docker容器数据卷主要功能是:容器的持久化.容器间继承+共享数据 特点: (1)数据卷可以容器之间共享或重用数据 (2)卷中更改可以直接生效 (3)数据 ...
- linux下pgAdmin4安装
首先到pgAdmin4官方网站下载安装包:https://www.pgadmin.org/download/ 我下载的是3.0; 到文件所在目录执行安装命令: sudo pip install ./p ...
- codeforces 497E Subsequences Return
codeforces 497E Subsequences Return 想法 做完这题,学了一些东西. 1.求一个串不同子序列个数的两种方法.解一 解二 2.这道题 \(n\) 很大,很容易想到矩阵加 ...
- Java 多态(接口)
有两种意义的多态,一是操作名称的多态,即有多个操作具有相同的名字,但这些操作所接收的消息类型必须不同(方法重载).另一种多态是和继承有关的多态,是指同一个操作被不同类型对象调用时可能产生不同的行为(方 ...
- JavaScript 变量声明提升
JavaScript 变量声明提升 一.变量提升的部分只是变量的声明,赋值语句和可执行的代码逻辑还保持在原地不动 二.在基本的语句(或者说代码块)中(比如:if语句.for语句.while语句.swi ...
- java内部类之成员内部类
内部类概念:顾名思义,就是将一个类定义在另一个个类内部.内部的类称之为内部类 . 内部类的主要特点:1.内部类可以很好的实现隐藏,可以使用protected.private修饰符.2.内部类可以直接访 ...
- Linux磁盘管理.md
df df 即“可用磁盘”disk free,用于显示文件系统的磁盘使用情况.默认情况下 df 命令将以每块 1K 的单位进行显示所有当前已挂载的文件系统,如果你想以人类易读的格式显示 df 命令的输 ...
- Kali-linux分析密码
在实现密码破解之前,介绍一下如何分析密码.分析密码的目的是,通过从目标系统.组织中收集信息来获得一个较小的密码字典.本节将介绍使用Ettercap工具或MSFCONSOLE来分析密码. 8.2.1 E ...
- 获取某商家当前每个月销量sql语句。
用两个mysql函数 FROM_UNIXTIME( ordertime )将日期格式转换成时间戳 month( FROM_UNIXTIME( ordertime ) ) 获取当前日期的月 select ...
- web前端开发从0到1—html结构与常用标签
一:html文档标签结构 <html></html><!--文档片头信息,表示文档内容是用什么标签写的.--> <head></head>& ...