摘要:最常見的用法就是存儲(chǔ)用戶的登錄數(shù)據(jù)。如果用戶未登錄,則顯示登錄兩個(gè)字提醒用戶可以點(diǎn)擊登錄。創(chuàng)建文件用戶登錄配置根路由用戶管理配置因?yàn)檫@個(gè)并沒有改動(dòng),因此不用遷移數(shù)據(jù)。總結(jié)本章用到了表單類模板語句用戶驗(yàn)證等知識(shí)完成了用戶管理的登錄和退出。
用戶管理
用戶數(shù)據(jù)可以說是大部分網(wǎng)站最重要的資產(chǎn)。用戶管理就是對(duì)用戶數(shù)據(jù)進(jìn)行增刪改查等操作的功能,自然也就非常的重要了。
本章開始學(xué)習(xí)用戶管理的內(nèi)容,首先從用戶登錄開始。
在Django中用app來區(qū)別不同功能的模塊,達(dá)到代碼隔離和復(fù)用。因?yàn)橛脩艄芾砗筒┛臀恼碌墓δ懿煌?,因此需要新建一個(gè)專門的app。
進(jìn)入虛擬環(huán)境,運(yùn)行startapp指令創(chuàng)建新的app:
python manage.py startapp userprofile
查看項(xiàng)目目錄,發(fā)現(xiàn)已經(jīng)新生成了userprofile目錄及其中的文件了。
再遇表單類用戶登錄時(shí),需要填寫賬戶密碼等表單數(shù)據(jù),因此又要用到Form表單類。
在userprofile目錄中創(chuàng)建表單類的文件forms.py,編寫如下代碼:
/userprofile/forms.py # 引入表單類 from django import forms # 引入 User 模型 from django.contrib.auth.models import User # 登錄表單,繼承了 forms.Form 類 class UserLoginForm(forms.Form): username = forms.CharField() password = forms.CharField()
在前面發(fā)表文章的模塊中,表單類繼承了forms.ModelForm,這個(gè)父類適合于需要直接與數(shù)據(jù)庫交互的功能,比如新建、更新數(shù)據(jù)庫的字段等。如果表單將用于直接添加或編輯Django模型,則可以使用 ModelForm來避免重復(fù)書寫字段描述。
而forms.Form則需要手動(dòng)配置每個(gè)字段,它適用于不與數(shù)據(jù)庫進(jìn)行直接交互的功能。用戶登錄不需要對(duì)數(shù)據(jù)庫進(jìn)行任何改動(dòng),因此直接繼承forms.Form就可以了。
編寫視圖用戶的登錄是比較復(fù)雜的功能,好在Django提供了封裝好的模塊供我們使用。
首先在userprofile/views.py中寫視圖函數(shù):
/userprofile/views.py from django.shortcuts import render, redirect from django.contrib.auth import authenticate, login from django.http import HttpResponse from .forms import UserLoginForm # Create your views here. def user_login(request): if request.method == "POST": user_login_form = UserLoginForm(data=request.POST) if user_login_form.is_valid(): # .cleaned_data 清洗出合法數(shù)據(jù) data = user_login_form.cleaned_data # 檢驗(yàn)賬號(hào)、密碼是否正確匹配數(shù)據(jù)庫中的某個(gè)用戶 # 如果均匹配則返回這個(gè) user 對(duì)象 user = authenticate(username=data["username"], password=data["password"]) if user: # 將用戶數(shù)據(jù)保存在 session 中,即實(shí)現(xiàn)了登錄動(dòng)作 login(request, user) return redirect("article:article_list") else: return HttpResponse("賬號(hào)或密碼輸入有誤。請(qǐng)重新輸入~") else: return HttpResponse("賬號(hào)或密碼輸入不合法") elif request.method == "GET": user_login_form = UserLoginForm() context = { "form": user_login_form } return render(request, "userprofile/login.html", context) else: return HttpResponse("請(qǐng)使用GET或POST請(qǐng)求數(shù)據(jù)")
跟發(fā)表文章的表單類類似,F(xiàn)orm對(duì)象的主要任務(wù)就是驗(yàn)證數(shù)據(jù)。調(diào)用is_valid()方法驗(yàn)證并返回指定數(shù)據(jù)是否有效的布爾值。
Form不僅負(fù)責(zé)驗(yàn)證數(shù)據(jù),還可以“清洗”它:將其標(biāo)準(zhǔn)化為一致的格式,這個(gè)特性使得它允許以各種方式輸入特定字段的數(shù)據(jù),并且始終產(chǎn)生一致的輸出。一旦Form使用數(shù)據(jù)創(chuàng)建了一個(gè)實(shí)例并對(duì)其進(jìn)行了驗(yàn)證,就可以通過cleaned_data屬性訪問清洗之后的數(shù)據(jù)。
authenticate()方法驗(yàn)證用戶名稱和密碼是否匹配,如果是,則將這個(gè)用戶數(shù)據(jù)返回。
login()方法實(shí)現(xiàn)用戶登錄,將用戶數(shù)據(jù)保存在session中。
其他的內(nèi)容就跟發(fā)表文章時(shí)的技巧類似了。
什么是sessionSession在網(wǎng)絡(luò)應(yīng)用中,稱為“會(huì)話控制”,它存儲(chǔ)特定用戶會(huì)話所需的屬性及配置信息。
當(dāng)用戶在 Web 頁之間跳轉(zhuǎn)時(shí),存儲(chǔ)在 Session 對(duì)象中的變量將不會(huì)丟失,而是在整個(gè)用戶會(huì)話中一直存在下去。
Session 最常見的用法就是存儲(chǔ)用戶的登錄數(shù)據(jù)。
詳情看這里:Session百度百科
登錄的模板接著寫模板文件。
創(chuàng)建/templates/userprofile/login.html模板:
/templates/userprofile/login.html {% extends "base.html" %} {% load staticfiles %} {% block title %} 登錄 {% endblock title %} {% block content %}{% endblock content %}
內(nèi)容與使用Form表單類發(fā)表新文章非常類似。唯一新知識(shí)是輸入密碼表單的type="password",可以讓輸入密碼的時(shí)候顯示小圓點(diǎn),避免有人偷窺。
然后我們改寫一下tempalates/header.html,把登錄的按鈕加進(jìn)去:
/tempalates/header.html ......
這里使用了新的模板語法:{% if ... %},用來判斷用戶是否已經(jīng)登錄:
如果用戶已經(jīng)登錄,則顯示一個(gè)名字為用戶名稱的下拉框,就像通常的社交網(wǎng)站一樣。
如果用戶未登錄,則顯示“登錄”兩個(gè)字提醒用戶可以點(diǎn)擊登錄。
is_authenticated是models.User類的屬性,用于判斷用戶是否已通過身份驗(yàn)證。
url及其他設(shè)置最后的步驟就是將app配置到項(xiàng)目中去。
創(chuàng)建userprofile/urls.py文件:
/userprofile/urls.py from django.urls import path from . import views app_name = "userprofile" urlpatterns = [ # 用戶登錄 path("login/", views.user_login, name="login"), ]
配置根路由my_blog/urls.py:
/my_blog/urls.py ... urlpatterns = [ ... # 用戶管理 path("userprofile/", include("userprofile.urls", namespace="userprofile")), ]
配置my_blog/settings.py:
my_blog/settings.py ... INSTALLED_APPS = [ ... "userprofile", ] ...
因?yàn)?b>userprofile這個(gè)app并沒有改動(dòng)model,因此不用遷移數(shù)據(jù)。
OK了,運(yùn)行服務(wù)器,在admin后臺(tái)中退出登錄(找找頁面右上角),返回到文章列表頁:
點(diǎn)擊登錄按鈕,輸入賬號(hào)和密碼(可以故意輸錯(cuò)試試會(huì)出現(xiàn)什么):
點(diǎn)擊提交,將自動(dòng)回到文章列表頁面:
大功告成。
用戶的退出有了用戶登錄的知識(shí)后,用戶退出就很簡(jiǎn)單了。這里就直接給出代碼,相信你一定能看懂。
還是先添加用戶退出的視圖:
/userprofile/views.py ... # 引入logout模塊 from django.contrib.auth import authenticate, login, logout ... # 用戶退出 def user_logout(request): logout(request) return redirect("article:article_list")
然后配置/userprofile/urls.py:
/userprofile/urls.py ... urlpatterns = [ path("login/", views.user_login, name="login"), # 用戶退出 path("logout/", views.user_logout, name="logout"), ]
在寫登錄的代碼時(shí),已經(jīng)給用戶退出留好了接口,因此只需要改動(dòng)/templates/header.html:
/templates/header.html ... # 改動(dòng) href 中的鏈接指向 退出登錄 ...
保存后刷新頁面,點(diǎn)擊下拉框中“退出登錄”選項(xiàng),用戶就順利退出了。
總結(jié)本章用到了表單類、if模板語句、用戶驗(yàn)證等知識(shí)完成了用戶管理的登錄和退出。
接下來學(xué)習(xí)如何實(shí)現(xiàn)注冊(cè)和刪除。
有疑問請(qǐng)?jiān)诙刨惖膫€(gè)人網(wǎng)站留言,我會(huì)盡快回復(fù)。
或Email私信我:dusaiphoto@foxmail.com
項(xiàng)目完整代碼:Django_blog_tutorial
轉(zhuǎn)載請(qǐng)告知作者并注明出處。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/44922.html
摘要:既然有登錄登出,那么用戶的注冊(cè)肯定也是少不了的。用戶在注冊(cè)成功后會(huì)自動(dòng)登錄并返回博客列表頁面。總結(jié)本章用到了表單類對(duì)數(shù)據(jù)進(jìn)行驗(yàn)證清洗等知識(shí),完成了用戶的注冊(cè)功能。 既然有登錄登出,那么用戶的注冊(cè)肯定也是少不了的。 注冊(cè)表單類 用戶注冊(cè)時(shí)會(huì)用到表單來提交賬號(hào)、密碼等數(shù)據(jù),所以需要寫注冊(cè)用的表單/userprofile/forms.py: /userprofile/forms.py .....
摘要:本章講如何幫助健忘癥患者,重置用戶密碼。實(shí)際上不僅內(nèi)置了密碼重置,還包括登錄登出密碼修改等功能。總結(jié)本章學(xué)習(xí)了使用第三方庫,高效完成了重置密碼的功能。有疑問請(qǐng)?jiān)诙刨惖膫€(gè)人網(wǎng)站留言,我會(huì)盡快回復(fù)。 隨著技術(shù)的發(fā)展,驗(yàn)證用戶身份的手段越來越多,指紋、面容、聲紋應(yīng)有盡有,但密碼依然是最重要的手段。 互聯(lián)網(wǎng)處處都有密碼的身影,甚至變成了現(xiàn)代人的一種負(fù)擔(dān)。像筆者這樣的,動(dòng)輒幾十個(gè)賬號(hào)密碼,忘記其...
摘要:聲明本博客的注冊(cè)登錄退出功能將使用,參考資源如下文檔教程安裝配置信息安裝后設(shè)置,將相關(guān)加入到里去。指定與特定配置文件相關(guān)聯(lián)的對(duì)象之?dāng)?shù)據(jù)庫的。因此并沒有提供用戶詳情應(yīng)用用戶詳情請(qǐng)參考個(gè)人博客五用戶個(gè)人資料擴(kuò)展 聲明:本博客的注冊(cè)登錄退出功能將使用django-allauth,參考資源如下:django-allauth文檔django-allauth教程 1、安裝django-allau...
摘要:聲明本博客的注冊(cè)登錄退出功能將使用,參考資源如下文檔教程安裝配置信息安裝后設(shè)置,將相關(guān)加入到里去。指定與特定配置文件相關(guān)聯(lián)的對(duì)象之?dāng)?shù)據(jù)庫的。因此并沒有提供用戶詳情應(yīng)用用戶詳情請(qǐng)參考個(gè)人博客五用戶個(gè)人資料擴(kuò)展 聲明:本博客的注冊(cè)登錄退出功能將使用django-allauth,參考資源如下:django-allauth文檔django-allauth教程 1、安裝django-allau...
閱讀 2199·2021-11-22 13:52
閱讀 1064·2021-11-17 09:33
閱讀 2776·2021-09-01 10:49
閱讀 2904·2019-08-30 15:53
閱讀 2712·2019-08-29 16:10
閱讀 2482·2019-08-29 11:31
閱讀 1475·2019-08-26 11:40
閱讀 1962·2019-08-26 10:59