Django使用者身份驗證完成示例程式碼
在這篇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),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 = "[email protected]" 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 身份驗證 內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!