亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

Django搭建個(gè)人博客:用戶的登錄和登出

whidy / 1964人閱讀

摘要:最常見的用法就是存儲(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í)的技巧類似了。

什么是session

Session在網(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 %}

{% csrf_token %}
{% 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_authenticatedmodels.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

相關(guān)文章

  • Django搭建個(gè)人博客用戶注冊(cè)

    摘要:既然有登錄登出,那么用戶的注冊(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 .....

    leanote 評(píng)論0 收藏0
  • Django搭建個(gè)人博客:重置用戶密碼

    摘要:本章講如何幫助健忘癥患者,重置用戶密碼。實(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)密碼,忘記其...

    mumumu 評(píng)論0 收藏0
  • 個(gè)人博客四|注冊(cè)登錄退出功能后臺(tái)開發(fā)

    摘要:聲明本博客的注冊(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...

    Darkgel 評(píng)論0 收藏0
  • 個(gè)人博客四|注冊(cè)登錄退出功能后臺(tái)開發(fā)

    摘要:聲明本博客的注冊(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...

    sushi 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<