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中声明只包含一个元素的元组数据方法
Aug 25 Python
Python的SQLalchemy模块连接与操作MySQL的基础示例
Jul 11 Python
python使用邻接矩阵构造图代码示例
Nov 10 Python
python爬虫框架scrapy实现模拟登录操作示例
Aug 02 Python
django session完成状态保持的方法
Nov 27 Python
对Python之gzip文件读写的方法详解
Feb 08 Python
Django实现web端tailf日志文件功能及实例详解
Jul 28 Python
linux下python中文乱码解决方案详解
Aug 28 Python
softmax及python实现过程解析
Sep 30 Python
SELENIUM自动化模拟键盘快捷键操作实现解析
Oct 28 Python
python+selenium定时爬取丁香园的新型冠状病毒数据并制作出类似的地图(部署到云服务器)
Feb 09 Python
Python大批量搜索引擎图像爬虫工具详解
Nov 16 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
dedecms 制作模板中使用的全局标记图文教程
2007/03/11 PHP
Windows2003下php5.4安装配置教程(Apache2.4)
2016/06/30 PHP
PHP设计模式之原型模式定义与用法详解
2018/04/03 PHP
漂亮的thinkphp 跳转页封装示例
2019/10/16 PHP
PHP快速导出百万级数据到CSV或者EXCEL文件
2020/11/27 PHP
优秀js开源框架-jQuery使用手册(1)
2007/03/10 Javascript
asp.net和asp下ACCESS的参数化查询
2008/06/11 Javascript
用JavaScrpt实现文件夹简单轻松加密的实现方法图文
2008/09/08 Javascript
javascript分页代码(当前页码居中)
2012/09/20 Javascript
3分钟写出来的Jquery版checkbox全选反选功能
2013/10/23 Javascript
javascript匀速动画和缓冲动画详解
2016/10/20 Javascript
JavaScript仿微博发布信息案例
2016/11/16 Javascript
jquery 判断是否支持Placeholder属性的方法
2017/02/07 Javascript
xmlplus组件设计系列之图标(ICON)(1)
2017/05/05 Javascript
基于LayUI实现前端分页功能的方法
2017/07/22 Javascript
JavaScript-定时器0~9抽奖系统详解(代码)
2017/08/16 Javascript
JS实现HTML页面中动态显示当前时间完整示例
2018/07/30 Javascript
angularjs模态框的使用代码实例
2019/12/20 Javascript
jQuery实现王者荣耀手风琴效果
2020/01/17 jQuery
python 实现文件的递归拷贝实现代码
2012/08/02 Python
python中实现延时回调普通函数示例代码
2017/09/08 Python
python logging模块的使用总结
2019/07/09 Python
Django打印出在数据库中执行的语句问题
2019/07/25 Python
keras模型可视化,层可视化及kernel可视化实例
2020/01/24 Python
Python基础之列表常见操作经典实例详解
2020/02/26 Python
Django数据库操作之save与update的使用
2020/04/01 Python
VSCode中autopep8无法运行问题解决方案(提示Error: Command failed,usage)
2021/03/02 Python
中国最大隐形眼镜网上商城:视客眼镜网
2016/10/30 全球购物
开学典礼感言
2014/02/16 职场文书
公司踏青活动方案
2014/08/16 职场文书
领导干部作风整顿个人剖析材料
2014/10/11 职场文书
办公室主任个人对照检查材料思想汇报
2014/10/11 职场文书
初婚未育证明样本
2014/10/24 职场文书
大学生求职简历自我评价
2015/03/02 职场文书
2015年乡镇妇联工作总结
2015/05/19 职场文书
开业庆典致辞
2015/08/01 职场文书