生成数据库

查看 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 模块的更多相关文章

  1. Django——Auth模块(用户认证模块)

    1.Auth模块简介 auth模块是对登录认证方法的一种封装,之前我们获取用户输入的用户名及密码后需要自己从user表里查询有没有用户名和密码符合的对象. 而有了auth模块之后就可以很轻松的去验证用 ...

  2. Python Django 功能模块

    Python Django模块 Django模块,是针对有django基础,对django功能进行模块化,方便下次使用. 一.注册模块 该注册采用邮箱验证,注册成功后会发送激活链接到邮箱. 邮箱验证参 ...

  3. django ---Auth模块

    Auth模块 本文目录 1 Auth模块是什么 2 auth模块常用方法 3 扩展默认的auth_user表 回到目录 1 Auth模块是什么 Auth模块是Django自带的用户认证模块: 我们在开 ...

  4. Django-中间件-csrf扩展请求伪造拦截中间件-Django Auth模块使用-效仿 django 中间件配置实现功能插拔式效果-09

    目录 昨日补充:将自己写的 login_auth 装饰装在 CBV 上 django 中间件 django 请求生命周期 ***** 默认中间件及其大概方法组成 中间件的执行顺序 自定义中间件探究不同 ...

  5. Django—auth模块

    auth模块简介 auth模块是对登录认证方法的一种封装,之前我们获取用户输入的用户名及密码后需要自己从user表里查询有没有用户名和密码符合的对象, 而有了auth模块之后就可以很轻松的去验证用户的 ...

  6. Django Auth模块及User对象方法

    一:Django的用户认证 from django.contrib import auth django.contrib.auth中提供了许多方法,这里主要介绍其中的三个: 1:authenticat ...

  7. Django (auth模块、User对象、用户认证、线上-用户认证)

    一.auth模块 django.contrib.auth中提供了许多方法,这里主要介绍其中的三个: authenticate()    提供了用户认证,即验证用户名以及密码是否正确,一般需要usern ...

  8. python - django (auth 的使用)

    # """ 1. 创建用户: python manage.py createsuperuser 2. from django.contrib import auth au ...

  9. 1205 CSRF跨站请求与django中的auth模块使用

    目录 今日内容 昨日回顾 基于配置文件的编程思想 importlib模块 简单代码实现 跨站请求伪造csrf 1. 钓鱼网站 如何实现 模拟该现象的产生 2. 解决问题 解决 {% csrf_toke ...

随机推荐

  1. 洛谷P3810 陌上花开(CDQ分治)

    洛谷P3810 陌上花开 传送门 题解: CDQ分治模板题. 一维排序,二维归并,三维树状数组. 核心思想是分治,即计算左边区间对右边区间的影响. 代码如下: #include <bits/st ...

  2. httprunner学习8-validate校验器

    前言 在一个完整的测试用例中,断言是必不可少的,断言是拿实际结果和期望结果去比较,在httprunner中用validate来对比测试结果. validate校验器 在httprunner的源码里,u ...

  3. python正则表达式(8)--分组、后向引用、前(后)向断言

    无名.有名分组 (1)正则表达式—无名分组 从正则表 达式的左边开始看,看到的第一个左括号“(”表示表示第一个分组,第二个表示第二个分组, 依次类推. 需要注意的是,有一个隐含的全局分组(就是索引号为 ...

  4. ROS学习(更新中~)

    1.一次把ROS环境变量都自动配置好(即添加到bash会话中)echo "source /opt/ros/indigo/setup.bash" >> ~/.bashrc ...

  5. 如何把标准cout 输出到 自己写的web server

    如何把标准cout 输出到 自己写的web server 如何把标准cout 输出到 自己写的web server 如何把标准cout 输出到 自己写的web server cgi的功能? 有时间实现 ...

  6. easyui datebox 只显示日期,本文为转载,稍加改动

    var DateBoxHandler = {}; DateBoxHandler.onlyShowMonth = function(id) { function padding(v) {if (v &l ...

  7. input提示字在有焦点消失或输入改变时消失

    一:获取焦点时 提示字消失 <input type="text" name="textfield" value="这里是提示内容" o ...

  8. 电脑按键混乱,好像被锁定了Alt键

    在知乎上找到一篇文章,https://zhuanlan.zhihu.com/p/34835461 解决了我的问题,解决办法是按住左右两边的alt+shift+ctrl

  9. scala 学习笔记--闭了个包

    object Test01 { def main(args: Array[String]): Unit = { //普通函数 val squ=(x:Int) => x*x // ps:_的简写形 ...

  10. 51 Nod 1135 原根

    基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 设m是正整数,a是整数,若a模m的阶等于φ(m),则称a为模m的一个原根.(其中φ(m)表示m的欧拉函数) 给出1个质数P ...