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 2.6.6升级到python 2.7.x版本的方法
Oct 09 Python
python实现随机梯度下降(SGD)
Mar 24 Python
全面分析Python的优点和缺点
Feb 07 Python
Python实现去除列表中重复元素的方法小结【4种方法】
Apr 27 Python
解决nohup执行python程序log文件写入不及时的问题
Jan 14 Python
python的pytest框架之命令行参数详解(上)
Jun 27 Python
python cv2截取不规则区域图片实例
Dec 21 Python
python下载卫星云图合成gif的方法示例
Feb 18 Python
浅谈JupyterNotebook导出pdf解决中文的问题
Apr 22 Python
Python基于DB-API操作MySQL数据库过程解析
Apr 23 Python
python实现磁盘日志清理的示例
Nov 05 Python
用 Python 元类的特性实现 ORM 框架
May 19 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
使用cookie实现统计访问者登陆次数
2013/06/08 PHP
ThinkPHP3.1新特性之对页面压缩输出的支持
2014/06/19 PHP
php中rename函数用法分析
2014/11/15 PHP
PHP接收json 并将接收数据插入数据库的实现代码
2015/12/01 PHP
php+MySQL实现登录时验证登录名和密码是否正确
2016/05/10 PHP
php中文语义分析实现方法示例
2019/09/28 PHP
Javascript调试工具(下载)
2007/01/09 Javascript
用js实现多域名不同文件的调用方法
2007/01/12 Javascript
同一页面多个商品倒计时JS 基于面向对象的javascript
2012/02/16 Javascript
异步javascript的原理和实现技巧介绍
2012/11/08 Javascript
jquery实现网站超链接和图片提示效果
2013/03/21 Javascript
javascript操作Cookie(设置、读取、删除)方法详解
2015/03/18 Javascript
JavaScript encodeURI 和encodeURIComponent
2015/12/04 Javascript
jQuery操作Table技巧大汇总
2016/01/23 Javascript
JS获取年月日时分秒的方法分析
2016/11/28 Javascript
解析预加载显示图片艺术
2016/12/05 Javascript
JavaScript字符串对象(string)基本用法示例
2017/01/18 Javascript
详解Node.js 命令行程序开发教程
2017/06/07 Javascript
使用js获取伪元素的content实例
2017/10/24 Javascript
Vue + better-scroll 实现移动端字母索引导航功能
2018/05/07 Javascript
Nodejs技巧之Exceljs表格操作用法示例
2019/11/06 NodeJs
Node 模块原理与用法详解
2020/05/13 Javascript
idea创建springMVC框架和配置小文件的教程图解
2018/09/18 Python
python如何提升爬虫效率
2020/09/27 Python
CSS3 RGBA色彩模式使用实例讲解
2016/04/26 HTML / CSS
常用的HTML5列表标签
2017/06/20 HTML / CSS
OLEDBConnection和SQLConnection有什么区别
2013/05/31 面试题
生物技术毕业生自荐信
2013/10/23 职场文书
中学生爱国演讲稿
2013/12/31 职场文书
幼儿园元旦亲子活动方案
2014/02/17 职场文书
伊索寓言教学反思
2014/05/01 职场文书
幼儿园中班班级总结
2015/08/10 职场文书
2016年9月份红领巾广播稿
2015/12/21 职场文书
WordPress多语言翻译插件 - WPML使用教程
2021/04/01 PHP
苹果M1芯片安装nginx 并且部署vue项目步骤详解
2021/11/20 Servers
Java使用HttpClient实现文件下载
2022/08/14 Java/Android