Python - Django - auth 模块
生成数据库
查看 auth_user 数据库
给 auth_user 表创建一个超级用户
邮箱地址可以不写
再看一下 auth_user 表
密码被加密了
login.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登录页面</title>
</head>
<body> <form action="/login/" method="post">
{% csrf_token %}
<p>
用户名:
<input type="text" name="username">
</p>
<p>
密码:
<input type="password" name="password">
</p>
<p>
<input type="submit" value="登录">
</p>
</form> </body>
</html>
authenticate():
该方法是用户认证功能,可以验证用户名和密码是否正确
如果认证成功,会返回一个 User 对象;如果认证失败,会返回一个匿名对象
authenticate() 会在该 User 对象上设置一个属性来标识后端已经认证了该用户,且该信息在后续的登录过程中是需要的
views.py:
from django.shortcuts import render, redirect
from django.contrib import auth def login(request):
if request.method == "POST":
username = request.POST.get("username")
password = request.POST.get("password") # 判断用户名密码是否有效
user = auth.authenticate(username=username, password=password)
if user:
# 如果用户名密码有效
return redirect("/index/") return render(request, "login.html") def index(request):
return render(request, "index.html")
访问,http://127.0.0.1:8000/login/
输入 admin,admin123
验证成功
login(HttpRequest, user):
该函数接受一个 HttpRequest 对象,以及一个经过认证的 User 对象
该函数实现一个用户登录的功能,它本质上会在后端为该用户生成相关 session 数据
views.py:
from django.shortcuts import render, redirect
from django.contrib import auth def login(request):
if request.method == "POST":
username = request.POST.get("username")
password = request.POST.get("password") # 判断用户名密码是否有效
user = auth.authenticate(username=username, password=password)
# 将登录的用户封装到 request.user
auth.login(request, user)
if user:
# 如果用户名密码有效
return redirect("/index/") return render(request, "login.html") def index(request):
print(request.user.username) # 获取到封装的 request.user 的 username
print(request.user.password) # 获取到封装的 request.user 的 password
return render(request, "index.html")
访问,http://127.0.0.1:8000/login/
输入 admin,admin123
验证成功
看一下执行结果:
得到的密码是加密后的
logout():
当调用该函数时,当前请求的 session 信息会全部被清除
如果没有登录信息,使用该函数也不会报错
views.py:
from django.shortcuts import render, redirect
from django.contrib import auth def login(request):
if request.method == "POST":
username = request.POST.get("username")
password = request.POST.get("password") # 判断用户名密码是否有效
user = auth.authenticate(username=username, password=password)
# 将登录的用户封装到 request.user
auth.login(request, user)
if user:
# 如果用户名密码有效
return redirect("/index/") return render(request, "login.html") def index(request):
print(request.user.username) # 获取到封装的 request.user 的 username
print(request.user.password) # 获取到封装的 request.user 的 password
return render(request, "index.html") def logout(request):
auth.logout(request)
return redirect("/login/")
index.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>index 页面</title>
</head>
<body> <h1>这里是 index 页面</h1>
<a href="/logout/">注销</a> </body>
</html>
访问,http://127.0.0.1:8000/login/
输入 admin,admin123
点击“注销”
跳转到登录页面
is_authenticated():
该方法用来判断当前请求是否通过了认证
views.py:
from django.shortcuts import render, redirect
from django.contrib import auth def login(request):
if request.method == "POST":
username = request.POST.get("username")
password = request.POST.get("password") # 判断用户名密码是否有效
user = auth.authenticate(username=username, password=password)
# 将登录的用户封装到 request.user
auth.login(request, user)
if user:
# 如果用户名密码有效
return redirect("/index/") return render(request, "login.html") def index(request):
print(request.user.username) # 获取到封装的 request.user 的 username
print(request.user.password) # 获取到封装的 request.user 的 password
ret = request.user.is_authenticated() # 判断是否通过了认证
print(ret)
return render(request, "index.html") def logout(request):
auth.logout(request)
return redirect("/login/")
访问,http://127.0.0.1:8000/login/
输入 admin,admin123
login_requierd():
该方法可以给视图函数添加登录校验
如果用户没有登录,则会跳转到 django 默认的登录 URL “/accounts/login/”,并传递当前访问 url 的绝对路径(登陆成功后,会重定向到该路径)
views.py:
from django.shortcuts import render, redirect
from django.contrib import auth
from django.contrib.auth.decorators import login_required def login(request):
if request.method == "POST":
username = request.POST.get("username")
password = request.POST.get("password") # 判断用户名密码是否有效
user = auth.authenticate(username=username, password=password)
# 将登录的用户封装到 request.user
auth.login(request, user)
if user:
# 如果用户名密码有效
return redirect("/index/") return render(request, "login.html") @login_required
def index(request):
return render(request, "index.html")
访问,http://127.0.0.1:8000/index/
因为不存在 /account/login/ 目录
如果需要自定义登录的 URL,可以在 settings.py 中通过 LOGIN_URL 进行修改
访问,http://127.0.0.1:8000/index/
create_user():
该方法用于创建一个新的用户
views.py:
from django.shortcuts import HttpResponse
from django.contrib.auth.models import User def reg(request):
User.objects.create_user(username="test", password="test") # 创建新用户
return HttpResponse("注册成功!")
访问,http://127.0.0.1:8000/reg/
查看 auth_user 表
添加成功
create_superuser():
该方法用于创建超级用户
views.py:
from django.shortcuts import HttpResponse
from django.contrib.auth.models import User def reg(request):
User.objects.create_superuser(username="root", password="root123", email="") # 创建新的超级用户
return HttpResponse("注册成功!")
访问,http://127.0.0.1:8000/reg/
查看 auth_user 表
成功创建超级用户
check_password(raw_password):
该方法检查密码是否正确的,需要提供当前请求用户的密码
密码正确返回 True,否则返回 False
views.py:
from django.shortcuts import render, redirect
from django.contrib import auth def login(request):
if request.method == "POST":
username = request.POST.get("username")
password = request.POST.get("password") # 判断用户名密码是否有效
user = auth.authenticate(username=username, password=password)
# 将登录的用户封装到 request.user
auth.login(request, user)
if user:
# 如果用户名密码有效
return redirect("/index/") return render(request, "login.html") def index(request):
ret = request.user.check_password(raw_password="aaa") # 检查密码是否是 aaa
print(ret)
return render(request, "index.html")
访问,http://127.0.0.1:8000/login/
输入 admin,admin123
运行结果:
set_password(raw_password):
该方法用来修改密码
views.py:
from django.shortcuts import HttpResponse
from django.contrib.auth.models import User def reg(request):
user_obj = User.objects.create_user(username="test1", password="test") # 创建新用户
user_obj.set_password("root") # 设置新密码
user_obj.save() # 保存设置的新密码
return HttpResponse("注册成功!")
新创建的用户 test1 的密码为 root,而不是 test
这里需要用 save 将设置的新密码保存
Python - Django - auth 模块的更多相关文章
- Django——Auth模块(用户认证模块)
1.Auth模块简介 auth模块是对登录认证方法的一种封装,之前我们获取用户输入的用户名及密码后需要自己从user表里查询有没有用户名和密码符合的对象. 而有了auth模块之后就可以很轻松的去验证用 ...
- Python Django 功能模块
Python Django模块 Django模块,是针对有django基础,对django功能进行模块化,方便下次使用. 一.注册模块 该注册采用邮箱验证,注册成功后会发送激活链接到邮箱. 邮箱验证参 ...
- django ---Auth模块
Auth模块 本文目录 1 Auth模块是什么 2 auth模块常用方法 3 扩展默认的auth_user表 回到目录 1 Auth模块是什么 Auth模块是Django自带的用户认证模块: 我们在开 ...
- Django-中间件-csrf扩展请求伪造拦截中间件-Django Auth模块使用-效仿 django 中间件配置实现功能插拔式效果-09
目录 昨日补充:将自己写的 login_auth 装饰装在 CBV 上 django 中间件 django 请求生命周期 ***** 默认中间件及其大概方法组成 中间件的执行顺序 自定义中间件探究不同 ...
- Django—auth模块
auth模块简介 auth模块是对登录认证方法的一种封装,之前我们获取用户输入的用户名及密码后需要自己从user表里查询有没有用户名和密码符合的对象, 而有了auth模块之后就可以很轻松的去验证用户的 ...
- Django Auth模块及User对象方法
一:Django的用户认证 from django.contrib import auth django.contrib.auth中提供了许多方法,这里主要介绍其中的三个: 1:authenticat ...
- Django (auth模块、User对象、用户认证、线上-用户认证)
一.auth模块 django.contrib.auth中提供了许多方法,这里主要介绍其中的三个: authenticate() 提供了用户认证,即验证用户名以及密码是否正确,一般需要usern ...
- python - django (auth 的使用)
# """ 1. 创建用户: python manage.py createsuperuser 2. from django.contrib import auth au ...
- 1205 CSRF跨站请求与django中的auth模块使用
目录 今日内容 昨日回顾 基于配置文件的编程思想 importlib模块 简单代码实现 跨站请求伪造csrf 1. 钓鱼网站 如何实现 模拟该现象的产生 2. 解决问题 解决 {% csrf_toke ...
随机推荐
- 洛谷P3810 陌上花开(CDQ分治)
洛谷P3810 陌上花开 传送门 题解: CDQ分治模板题. 一维排序,二维归并,三维树状数组. 核心思想是分治,即计算左边区间对右边区间的影响. 代码如下: #include <bits/st ...
- httprunner学习8-validate校验器
前言 在一个完整的测试用例中,断言是必不可少的,断言是拿实际结果和期望结果去比较,在httprunner中用validate来对比测试结果. validate校验器 在httprunner的源码里,u ...
- python正则表达式(8)--分组、后向引用、前(后)向断言
无名.有名分组 (1)正则表达式—无名分组 从正则表 达式的左边开始看,看到的第一个左括号“(”表示表示第一个分组,第二个表示第二个分组, 依次类推. 需要注意的是,有一个隐含的全局分组(就是索引号为 ...
- ROS学习(更新中~)
1.一次把ROS环境变量都自动配置好(即添加到bash会话中)echo "source /opt/ros/indigo/setup.bash" >> ~/.bashrc ...
- 如何把标准cout 输出到 自己写的web server
如何把标准cout 输出到 自己写的web server 如何把标准cout 输出到 自己写的web server 如何把标准cout 输出到 自己写的web server cgi的功能? 有时间实现 ...
- easyui datebox 只显示日期,本文为转载,稍加改动
var DateBoxHandler = {}; DateBoxHandler.onlyShowMonth = function(id) { function padding(v) {if (v &l ...
- input提示字在有焦点消失或输入改变时消失
一:获取焦点时 提示字消失 <input type="text" name="textfield" value="这里是提示内容" o ...
- 电脑按键混乱,好像被锁定了Alt键
在知乎上找到一篇文章,https://zhuanlan.zhihu.com/p/34835461 解决了我的问题,解决办法是按住左右两边的alt+shift+ctrl
- scala 学习笔记--闭了个包
object Test01 { def main(args: Array[String]): Unit = { //普通函数 val squ=(x:Int) => x*x // ps:_的简写形 ...
- 51 Nod 1135 原根
基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 设m是正整数,a是整数,若a模m的阶等于φ(m),则称a为模m的一个原根.(其中φ(m)表示m的欧拉函数) 给出1个质数P ...