Django用户身份验证完成示例代码


Posted in Python onApril 03, 2020

在这篇Django文章中,wom 将讨论Django User 验证,Django附带了一个用户认证系统。 它处理用户帐户,组,权限和基于cookie的用户会话。 Django身份验证系统同时处理身份验证和授权。 简要地说,身份验证将验证用户是他们声称的身份,而授权则确定允许经过身份验证的用户执行的操作。

基本上,我们将创建登录,注销,忘记密码和重置密码功能。

身份验证支持在django.contrib.auth中为Django contrib模块。默认情况下,所需的配置已包含在django-admin startproject生成的settings.py中,它们由INSTALLED_APPS设置中列出的两项组成:

1、“ django.contrib.auth”包含身份验证框架的核心及其默认模型。

2、“ django.contrib.contenttypes”是Django内容类型系统,它允许将权限与您创建的模型相关联。

以及MIDDLEWARE设置中的这些项目:

1、SessionMiddleware管理跨请求的会话。

2、AuthenticationMiddleware使用会话将用户与请求相关联。

有了这些设置后,运行命令manage.py migrate将为auth相关模型创建必要的数据库表,并为已安装的应用程序中定义的任何模型创建权限。

Django提供以下基于类的视图来处理身份验证。它们全部位于django.contrib.auth.views中:

LoginView:处理登录表单并登录用户
LogoutView:注销用户

PasswordChangeView:处理表单以更改用户密码
PasswordChangeDoneView:用户成功重定向到的视图 PasswordResetView:允许用户重置其密码。 它
生成带有令牌的一次性使用链接并将其发送给
用户的电子邮件帐户。

首先我们需要创建一个新的project工程:

django-admin startproject MyProject
#app
python manage.py startapp MyApp
 
#migrate
python manage.py migrate
 
#create a superuser
python manage.py createsuperuser

Login & LogoutView

首先,您需要在创建的应用程序中创建一个新的urls.py,并将其添加到您的文件中。

from django.urls import path, include
from django.views.generic.base import TemplateView
urlpatterns = [
 
  path('accounts/', include('django.contrib.auth.urls')),
  path('', TemplateView.as_view(template_name = 'home.html'), name = 'home')
 
]

然后在主project下urls.py文件添加如下:

from django.contrib import admin
from django.urls import path, include
 
urlpatterns = [
  path('admin/', admin.site.urls),
  path('', include('MyApp.urls'))
]

在帐户应用程序的template目录中创建一个新目录,并将其命名为registration。 这是Django身份验证视图期望身份验证模板所处的默认路径。

django.contrib.admin模块包含一些用于管理站点的身份验证模板。 我们已将帐户应用程序放置在INSTALLED_APPS设置的顶部,以便Django默认使用我们的模板,而不使用其他应用程序中定义的任何身份验证模板。

在templates / registration目录中创建一个新文件,将其命名为login.html,并向其中添加以下代码:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Login</title>
</head>
<body>
 
<h2>Login</h2>
 
<p>Please login with your valid credentials</p>
<form action="" method="post" novalidate>
 
 
  {% csrf_token %}
  {{form.as_p}}
 
  <input type="submit" value="Login">
 
 
</form>
 
<p><a href="{% url 'password_reset' %}">Reset Password</a> </p>
 
</body>
</html>

Django默认使用django.contrib.auth.forms中的AuthenticationForm表单。 如果登录失败,则此表单尝试对用户进行身份验证并引发验证错误。

另外,我们已经在顶部添加了home.html网址。 您需要在注册文件夹之外创建该文件,只需要在主模板中添加该文件,这些就是我们要添加到模板文件夹中的文件。 基本上,home.html用于重定向成功的登录。

这是base.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
 
{% block body %}
 
 
 
{% endblock %}
</body>
</html>

home.html代码如下:

{% block body %}
 
{% if user.is_authenticated %}
 
Welcome {{user.username}}
<p><a href="{% url 'logout' %}">Logout</a> </p>
 
{% else %}
 
<p><a href="{% url 'login' %}" >Login</a></p>
 
{% endif %}
 
{% endblock %}

基本上,我们将验证使用是否有效。

编辑项目的settings.py文件,并向其中添加以下代码:

LOGIN_REDIRECT_URL = '/'
LOGOUT_REDIRECT_URL = '/'

LOGIN_REDIRECT_URL:如果请求中没有下一个参数,则告诉Django成功登录后重定向哪个URL

LOGOUT_URL:用于重定向用户以注销的URL

密码修改

这些是我们更改密码的文件。 将这些文件添加到template / registration文件夹中。

password_change_form.html

{% extends 'base.html' %}
 
{% block body %}
 
<h1>Change The Password</h1>
 
<form action="" method="post">
 
  {% csrf_token %}
  {{form.as_p}}
 
 
  <input type="submit" value="Change Password">
</form>
 
{% endblock %}

password_change_done.html

{% extends 'base.html' %}
 
{% block body %}
 
<h1>Password Change Done</h1>
 
<p>Your password changed successfully</p> 
 
{% endblock %}

重设密码

在帐户应用程序的templates / registration /目录中添加一个新文件,并将其命名为password_reset_form.html。 向其添加以下代码:

password_reset_form.html

{% extends 'base.html' %}
 
{% block body %}
 
<h1>Password Reset Complete</h1>
 
<p> Your password has been sent, you can <a href="{% url 'login' %}">Login</a> now </p>

{% endblock %}

现在,在同一目录中创建另一个文件,并将其命名为password_reset_email.html。 向其添加以下代码:

{% extends 'base.html' %}
 
{% block body %}
 
Password reset for emal . {{email}} . follow the link
 
{{protocol}}://{{domain}}{% url 'password_reset_confirm' uidb64=uid token=token %}
 
{% endblock %}

password_reset_email.html模板将用于呈现发送给用户的电子邮件,以重置其密码。

在同一目录中创建另一个文件,并将其命名为password_reset_done.html。 向其添加以下代码:

{% extends 'base.html' %}
 
{% block body %}
 
<h1>Password Reset Done</h1>
 
We have emailed your instructions for setting your password.
 
{% endblock %}

在同一目录中创建另一个模板,并将其命名为password_reset_confirm.html。 向其添加以下代码:

{% extends 'base.html' %} 
{% block body %}
 
<h1>Password Reset</h1>
 
{% if validlink %}
 
<form action="" method="post">
 
  {% csrf_token %}
 
  {{form.as_p}} 
   <input type="submit" value="Reset Password"> 
</form>
 
{% else %}
<p>Password reset email link was invalid, you can request a new one .</p>
 
{% endif %}
{% endblock %}

我们检查提供的链接是否有效。 视图PasswordResetConfirmView会设置此变量,并将其放在password_reset_confirm.html模板的上下文中。 如果链接有效,则显示用户密码重置表格。

创建另一个模板,并将其命名为password_reset_complete.html。 在其中输入以下代码:

{% extends 'base.html' %}
 
{% block body %}
 
<h1>Password Reset Complete</h1>
 
<p> Your password has been sent, you can <a href="{% url 'login' %}">Login</a> now </p>
{% endblock %}

在settings.py文件中加入email的信息:

if not DEBUG:
   EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
   EMAIL_HOST_USER = "parwizforogh0@gmail.com"
   EMAIL_HOST = 'smtp.gmail.com'
   EMAIL_PORT = 587
   EMAIL_USE_TLS = True
   EMAIL_HOST_PASSWORD = "Your Password"
 
else:
  EMAIL_BACKEND = (
    "django.core.mail.backends.console.EmailBackend"
  )

启动工程,打开页面:

https://codeloop.org/wp-content/uploads/2020/03/django_login.png

登录:

Django用户身份验证完成示例代码

登录成功:

Django用户身份验证完成示例代码

到此这篇关于Django用户身份验证完成示例代码的文章就介绍到这了,更多相关Django 身份验证 内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python访问sqlserver示例
Feb 10 Python
介绍Python中的fabs()方法的使用
May 14 Python
python函数局部变量用法实例分析
Aug 04 Python
你所不知道的Python奇技淫巧13招【实用】
Dec 14 Python
python中abs&amp;map&amp;reduce简介
Feb 20 Python
python使用Tesseract库识别验证
Mar 21 Python
Python Selenium Cookie 绕过验证码实现登录示例代码
Apr 10 Python
python消除序列的重复值并保持顺序不变的实例
Nov 08 Python
python将字符串转换成json的方法小结
Jul 09 Python
Pytorch释放显存占用方式
Jan 13 Python
python实现根据给定坐标点生成多边形mask的例子
Feb 18 Python
Python接口测试环境搭建过程详解
Jun 29 Python
基于Python共轭梯度法与最速下降法之间的对比
Apr 02 #Python
python 的topk算法实例
Apr 02 #Python
python torch.utils.data.DataLoader使用方法
Apr 02 #Python
Python基于stuck实现scoket文件传输
Apr 02 #Python
Python要求O(n)复杂度求无序列表中第K的大元素实例
Apr 02 #Python
Pytorch 使用不同版本的cuda的方法步骤
Apr 02 #Python
pytorch 中的重要模块化接口nn.Module的使用
Apr 02 #Python
You might like
关于js和php对url编码的处理方法
2014/03/04 PHP
PHP加密解密字符串汇总
2015/04/26 PHP
PHP+redis实现添加处理投票的方法
2015/11/14 PHP
orm获取关联表里的属性值
2016/04/17 PHP
图片按比例缩放函数
2006/06/26 Javascript
Javascript判断对象是否相等实现代码
2013/03/18 Javascript
解析JavaScript中instanceof对于不同的构造器或许都返回true
2013/12/03 Javascript
javascript判断移动端访问设备并解析对应CSS的方法
2015/02/05 Javascript
Ubuntu 16.04 64位中搭建Node.js开发环境教程
2016/10/19 Javascript
js实现百度地图定位于地址逆解析,显示自己当前的地理位置
2016/12/08 Javascript
详解动画插件wow.js的使用方法
2017/09/13 Javascript
vue实现循环切换动画
2018/10/17 Javascript
JavaScript实现动态添加、移除元素或属性的方法分析
2019/01/03 Javascript
Vue.js中的组件系统
2019/05/30 Javascript
vue draggable resizable 实现可拖拽缩放的组件功能
2019/07/15 Javascript
原生js实现点击轮播切换图片
2020/02/11 Javascript
[01:00:49]DOTA2-DPC中国联赛 正赛 Ehome vs iG BO3 第二场 1月31日
2021/03/11 DOTA
Python实现新浪博客备份的方法
2016/04/27 Python
Python操作mongodb数据库进行模糊查询操作示例
2018/06/09 Python
python2.7使用plotly绘制本地散点图和折线图
2019/04/02 Python
pytorch下大型数据集(大型图片)的导入方式
2020/01/08 Python
基于Python的OCR实现示例
2020/04/03 Python
解决Python Matplotlib绘图数据点位置错乱问题
2020/05/16 Python
装上这 14 个插件后,PyCharm 真的是无敌的存在
2021/01/11 Python
IE兼容css3圆角的实现代码
2011/07/21 HTML / CSS
amazeui页面校验功能的实现代码
2020/08/24 HTML / CSS
英国度假别墅预订:Sykes Cottages
2017/06/12 全球购物
奢华时尚的创新平台:Baltini
2020/10/03 全球购物
EJB发布WEB服务一般步骤
2012/10/31 面试题
出售房屋委托书范本
2014/09/24 职场文书
医学专业大学生职业生涯规划书
2014/10/25 职场文书
第二批党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
教师党员学习群众路线心得体会
2014/11/04 职场文书
创业计划书之冷饮店
2019/09/27 职场文书
Nginx URL重写rewrite机制原理及使用实例
2021/04/01 Servers
教你快速构建一个基于nginx的web集群项目
2021/11/27 Servers