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字符串和文件操作常用函数分析
Apr 08 Python
Python实现简单的多任务mysql转xml的方法
Feb 08 Python
Python2和Python3中print的用法示例总结
Oct 25 Python
Python实现的摇骰子猜大小功能小游戏示例
Dec 18 Python
python 使用值来排序一个字典的方法
Nov 16 Python
python使用zip将list转为json的方法
Dec 31 Python
解决python中画图时x,y轴名称出现中文乱码的问题
Jan 29 Python
python matplotlib实现双Y轴的实例
Feb 12 Python
python使用opencv实现马赛克效果示例
Sep 28 Python
在OpenCV里使用特征匹配和单映射变换的代码详解
Oct 23 Python
Python 3.8 新功能大揭秘【新手必学】
Feb 05 Python
Python列表嵌套常见坑点及解决方案
Sep 30 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
计数器详细设计
2006/10/09 PHP
PHP把空格、换行符、中文逗号等替换成英文逗号的正则表达式
2014/05/04 PHP
PHP的魔术常量__METHOD__简介
2014/07/08 PHP
PHP 返回数组后处理方法(开户成功后弹窗提示)
2017/07/03 PHP
Laravel5.7 Eloquent ORM快速入门详解
2019/04/12 PHP
javascript各种复制代码收集
2008/09/20 Javascript
JS模拟的QQ面板上的多级可展开的菜单
2009/10/10 Javascript
js下判断 iframe 是否加载完成的完美方法
2010/10/26 Javascript
深入分析js中的constructor和prototype
2012/04/07 Javascript
用javascript模仿ie的自动完成类似自动完成功的表单
2012/12/12 Javascript
jquery dialog open后,服务器端控件失效的快速解决方法
2013/12/19 Javascript
jquery对象和DOM对象的任意相互转换
2016/02/21 Javascript
基于JavaScript实现带缩略图的轮播效果
2017/01/12 Javascript
ExtJs异步无法向外传值和赋值的完美解决办法
2017/06/14 Javascript
JS+HTML5 canvas绘制验证码示例
2018/12/05 Javascript
详解vue中$nextTick和$forceUpdate的用法
2019/12/11 Javascript
jQuery表单校验插件validator使用方法详解
2020/02/18 jQuery
django简单的前后端分离的数据传输实例 axios
2020/05/18 Javascript
使用JavaScript获取Django模板指定键值数据
2020/05/27 Javascript
一篇超完整的Vue新手入门指导教程
2020/11/18 Vue.js
[01:42]DOTA2 – 虚无之灵
2019/08/25 DOTA
王纯业的Python学习笔记 下载
2007/02/10 Python
基于pytorch的保存和加载模型参数的方法
2019/08/17 Python
详解Windows下PyCharm安装Numpy包及无法安装问题解决方案
2020/06/18 Python
Python代码覆盖率统计工具coverage.py用法详解
2020/11/25 Python
KIKO MILANO英国官网:意大利知名化妆品和护肤品品牌
2017/09/25 全球购物
德国珠宝和配件商店:Styleserver
2021/02/23 全球购物
可口可乐广告词
2014/03/20 职场文书
2014年护理工作总结范文
2014/11/14 职场文书
酒店财务总监岗位职责
2015/04/03 职场文书
2016新年问候语大全
2015/11/11 职场文书
读《人生的智慧》有感:闲暇是人生的精华
2019/12/25 职场文书
《卧薪尝胆》读后感3篇
2019/12/26 职场文书
详解MySQL InnoDB存储引擎的内存管理
2021/04/08 MySQL
python状态机transitions库详解
2021/06/02 Python
【海涛DOTA解说】EVE女子战队独家录像加ZSMJ神牛两连发
2022/04/01 DOTA