生成数据库

查看 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. Pytorch之Dataparallel源码解析

    之前对Pytorch 1.0 的Dataparallel的使用方法一直似懂非懂,总是会碰到各种莫名其妙的问题,今天就好好从源头梳理一下,更好地理解它的原理或者说说下步骤. 源码地址: https:// ...

  2. nuxt build 项目文件分析、nuxt build 发布后的资源如何部署cdn

    建议在项目发布的时候,还是将.nuxt 进行发布到生产环境,是比较稳妥的做法 出处:https://nickfu.com/p/150 nuxt build 后的前端资源都会存放在.nuxt/dist/ ...

  3. Controller的激活(2)

    通过VS 的Controller 创建想到创建的Controller 类型 实际上继承了抽象类System.Web.Mvc.Controller,他是ControllerBase的子类,抽象类Syst ...

  4. class struct Equals

    { class clsA { private int _i; public int I { set { _i = value; } get { return _i; } } } struct strc ...

  5. 爬虫-retrying用法

    文档:https://pypi.org/project/retrying/ 安装 pip install retrying 设置最大重试次数 # coding=utf-8 import request ...

  6. day004-python运算符与基本数据类型

    一.运算符1.算术运算符:主要用于两个对象算数计算(加减乘除等运算)运算符: +:两个对象相加 -:得到负数或是一个数减去另一个数 *:两个数相乘或是返回一个被重复若干次的字符串 /:x除以y %:返 ...

  7. ansible部署EFK

    修改自己不确定的配置文件前,先准备备份,防患于未然!!! Environment:{ 目前测试准备三台2m2g虚拟机  详情概略图见EFK的架构图 https://www.cnblogs.com/se ...

  8. learning shell check host dependent pkg

    [Purpose]        Shell script check host dependent pkg   [Eevironment]        Ubuntu 16.04 bash env ...

  9. win10系统绑定本地IP和mac地址

    第一步:找到自己的IP和mac地址 1.按着win键+R键,输入cmd(大小写都一样) 2.命令: ipconfig   /all              #查看所有地址 然后按“回车键” 3.这样 ...

  10. rsync同步备份

    一.服务器端.备份客户端安装 rsync 服务. 1.环境: CentOS 主 IP:172.16.3.18 备 IP:172.16.3.19 2.安装 rsync 软件 #yum install r ...