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 ...
随机推荐
- FTPClient中使用completePendingCommand方法注意事项
方法介绍: * There are a few FTPClient methods that do not complete the * entire sequence of FTP commands ...
- 错误 Unable to connect to a repository at URL 'svn://ip地址' 和 No repository found in 'svn://ip地址'
SVN服务器是CentOS6.10 使用TortoiseSVN客户端检出时遇到如下图所示的错误: 是因为没有指定SVN仓库的路径 在SVN服务器执行命令:svnserve -d -r /SVN版本库的 ...
- 王天悦 201671030121 实验十四 团队项目评审&课程学习总结
项目 内容 课程名称 2016级计算机科学与工程学院软件工程(西北师范大学) 作业要求 实验十四 团队项目评审&课程学习总结 课程学习目标 (1)掌握软件项目评审会流程,(2)反思总结课程学习 ...
- oracle row_number() over(partition by .. order by ..)和rank() over(partition by .. order by ..) 和dense_rank() over(partition by .. order by ..)的相似点与区别
新建一个测试表 create table dim_ia_test2(device_number varchar2(20),desc2 varchar2(20)) 插入数据后得到: 一.oracle r ...
- oracle数据库(五)
PL/SQL基础 PL/SQL语言是对oracle数据库语言的扩展,是一种高性能的基于处理事务的语言,能运行在任何oracle环境中,支持所有数据处理命令,支持所有SQL数据类型和函数,支持所有ora ...
- MIME Type介绍 Content-Type 各种定义
多用途互联网邮件扩展(MIME,Multipurpose Internet Mail Extensions)是一个互联网标准,它扩展了电子邮件标准,使其能够支持非ASCII字符.二进制格式附件等多种格 ...
- vue 自定义过滤器
vue允许自定义过滤器,被用作一些常见文本的格式化.由“管道符”指示,格式如下: <!-- 在两个大括号中 --> {{message | capitalize}} <!-- 在 ...
- K-string HDU - 4641 (后缀自动机)
K-string \[ Time Limit: 2000 ms\quad Memory Limit: 131072 kB \] 题意 给出长度为 \(n\) 的字符串,接下来跟着 \(m\) 次操作, ...
- luogu P4248 [AHOI2013]差异 SAM
luogu P4248 [AHOI2013]差异 链接 luogu 思路 \(\sum\limits_{1<=i<j<=n}{{len}(T_i)+{len}(T_j)-2*{lcp ...
- 正睿2019省选附加赛 Day10 (这篇其实已经都咕咕了...)
目录 2019.3.13 A.算算算(二项式定理 斯特林数) B.买买买 C.树树树 2019.3.13 比赛链接 A.算算算(二项式定理 斯特林数) 题目链接 \(x^k\)可以用二项式定理展开,需 ...