生成数据库

查看 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. FTPClient中使用completePendingCommand方法注意事项

    方法介绍: * There are a few FTPClient methods that do not complete the * entire sequence of FTP commands ...

  2. 错误 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版本库的 ...

  3. 王天悦 201671030121 实验十四 团队项目评审&课程学习总结

    项目 内容 课程名称 2016级计算机科学与工程学院软件工程(西北师范大学) 作业要求 实验十四 团队项目评审&课程学习总结 课程学习目标 (1)掌握软件项目评审会流程,(2)反思总结课程学习 ...

  4. 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 ...

  5. oracle数据库(五)

    PL/SQL基础 PL/SQL语言是对oracle数据库语言的扩展,是一种高性能的基于处理事务的语言,能运行在任何oracle环境中,支持所有数据处理命令,支持所有SQL数据类型和函数,支持所有ora ...

  6. MIME Type介绍 Content-Type 各种定义

    多用途互联网邮件扩展(MIME,Multipurpose Internet Mail Extensions)是一个互联网标准,它扩展了电子邮件标准,使其能够支持非ASCII字符.二进制格式附件等多种格 ...

  7. vue 自定义过滤器

    vue允许自定义过滤器,被用作一些常见文本的格式化.由“管道符”指示,格式如下: <!-- 在两个大括号中 --> {{message | capitalize}}   <!-- 在 ...

  8. K-string HDU - 4641 (后缀自动机)

    K-string \[ Time Limit: 2000 ms\quad Memory Limit: 131072 kB \] 题意 给出长度为 \(n\) 的字符串,接下来跟着 \(m\) 次操作, ...

  9. luogu P4248 [AHOI2013]差异 SAM

    luogu P4248 [AHOI2013]差异 链接 luogu 思路 \(\sum\limits_{1<=i<j<=n}{{len}(T_i)+{len}(T_j)-2*{lcp ...

  10. 正睿2019省选附加赛 Day10 (这篇其实已经都咕咕了...)

    目录 2019.3.13 A.算算算(二项式定理 斯特林数) B.买买买 C.树树树 2019.3.13 比赛链接 A.算算算(二项式定理 斯特林数) 题目链接 \(x^k\)可以用二项式定理展开,需 ...