成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

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

leanote / 1272人閱讀

摘要:既然有登錄登出,那么用戶的注冊(cè)肯定也是少不了的。用戶在注冊(cè)成功后會(huì)自動(dòng)登錄并返回博客列表頁(yè)面??偨Y(jié)本章用到了表單類對(duì)數(shù)據(jù)進(jìn)行驗(yàn)證清洗等知識(shí),完成了用戶的注冊(cè)功能。

既然有登錄登出,那么用戶的注冊(cè)肯定也是少不了的。

注冊(cè)表單類

用戶注冊(cè)時(shí)會(huì)用到表單來(lái)提交賬號(hào)、密碼等數(shù)據(jù),所以需要寫(xiě)注冊(cè)用的表單/userprofile/forms.py

/userprofile/forms.py

...

# 注冊(cè)用戶表單
class UserRegisterForm(forms.ModelForm):
    # 復(fù)寫(xiě) User 的密碼
    password = forms.CharField()
    password2 = forms.CharField()

    class Meta:
        model = User
        fields = ("username", "email")

    # 對(duì)兩次輸入的密碼是否一致進(jìn)行檢查
    def clean_password2(self):
        data = self.cleaned_data
        if data.get("password") == data.get("password2"):
            return data.get("password")
        else:
            raise forms.ValidationError("密碼輸入不一致,請(qǐng)重試。")

上一章也講過(guò),對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作的表單應(yīng)該繼承forms.ModelForm,可以自動(dòng)生成模型中已有的字段。

這里我們覆寫(xiě)了password字段,因?yàn)橥ǔT谧?cè)時(shí)需要重復(fù)輸入password來(lái)確保用戶沒(méi)有將密碼輸入錯(cuò)誤,所以覆寫(xiě)掉它以便我們自己進(jìn)行數(shù)據(jù)的驗(yàn)證工作。def clean_password2()中的內(nèi)容便是在驗(yàn)證密碼是否一致了。def clean_[字段]這種寫(xiě)法Django會(huì)自動(dòng)調(diào)用,來(lái)對(duì)單個(gè)字段的數(shù)據(jù)進(jìn)行驗(yàn)證清洗。

覆寫(xiě)某字段之后,內(nèi)部類class Meta中的定義對(duì)這個(gè)字段就沒(méi)有效果了,所以fields不用包含password

需要注意:

驗(yàn)證密碼一致性方法不能寫(xiě)def clean_password(),因?yàn)槿绻悴欢xdef clean_password2()方法,會(huì)導(dǎo)致password2中的數(shù)據(jù)被Django判定為無(wú)效數(shù)據(jù)從而清洗掉,從而password2屬性不存在。最終導(dǎo)致兩次密碼輸入始終會(huì)不一致,并且很難判斷出錯(cuò)誤原因。

從POST中取值用的data.get("password")是一種穩(wěn)妥的寫(xiě)法,即使用戶沒(méi)有輸入密碼也不會(huì)導(dǎo)致程序錯(cuò)誤而跳出。前面章節(jié)提取POST數(shù)據(jù)我們用了data["password"],這種取值方式如果data中不包含password,Django會(huì)報(bào)錯(cuò)。另一種防止用戶不輸入密碼就提交的方式是在表單中插入required屬性,后面會(huì)講到。

視圖函數(shù)

編寫(xiě)注冊(cè)的視圖/userprofile/views.py

/userprofile/views.py

# 引入 UserRegisterForm 表單類
from .forms import UserLoginForm, UserRegisterForm

# 用戶注冊(cè)
def user_register(request):
    if request.method == "POST":
        user_register_form = UserRegisterForm(data=request.POST)
        if user_register_form.is_valid():
            new_user = user_register_form.save(commit=False)
            # 設(shè)置密碼
            new_user.set_password(user_register_form.cleaned_data["password"])
            new_user.save()
            # 保存好數(shù)據(jù)后立即登錄并返回博客列表頁(yè)面
            login(request, new_user)
            return redirect("article:article_list")
        else:
            return HttpResponse("注冊(cè)表單輸入有誤。請(qǐng)重新輸入~")
    elif request.method == "GET":
        user_register_form = UserRegisterForm()
        context = { "form": user_register_form }
        return render(request, "userprofile/register.html", context)
    else:
        return HttpResponse("請(qǐng)使用GET或POST請(qǐng)求數(shù)據(jù)")

邏輯上結(jié)合了發(fā)表文章視圖用戶登錄視圖,沒(méi)有新的知識(shí)。

用戶在注冊(cè)成功后會(huì)自動(dòng)登錄并返回博客列表頁(yè)面。

模板和url

表單有關(guān)的模板文件我們也很熟悉了,新建/templates/userprofile/register.html

/templates/userprofile/register.html

{% extends "base.html" %} {% load staticfiles %}
{% block title %} 登錄 {% endblock title %}
{% block content %}

{% csrf_token %}
{% endblock content %}

上面的模板文件中,我們?cè)陉欠Q、密碼input 標(biāo)簽中添加了required屬性(前面提到過(guò))。如果用戶不填寫(xiě)帶有required屬性的字段,表單就不能提交,并提示用戶填寫(xiě)。實(shí)際上前面學(xué)習(xí)的很多表單都可以添加required屬性來(lái)提前驗(yàn)證數(shù)據(jù)的有效性。

注冊(cè)的入口你可以放在任何喜歡的地方。本文放在登錄頁(yè)面中/templates/userprofile/login.html

/templates/userprofile/login.html

...

還沒(méi)有賬號(hào)?
點(diǎn)擊注冊(cè)賬號(hào)加入我們吧!

...
...

最后就是在app中配置路由文件/userprofile/urls.py了:

/userprofile/urls.py

...

urlpatterns = [
    ...
    # 用戶注冊(cè)
    path("register/", views.user_register, name="register"),
]
測(cè)試

運(yùn)行服務(wù)器,進(jìn)入到登錄頁(yè)面,多了注冊(cè)的提示:

點(diǎn)擊注冊(cè)賬號(hào)進(jìn)入注冊(cè)頁(yè)面:

填寫(xiě)好表單后提交(Email地址是可以為空的):

成功登錄并返回了博客列表,功能完成。

總結(jié)

本章用到了表單類、對(duì)數(shù)據(jù)進(jìn)行驗(yàn)證清洗等知識(shí),完成了用戶的注冊(cè)功能。

接下來(lái)學(xué)習(xí)如何實(shí)現(xiàn)刪除已有的用戶。

有疑問(wèn)請(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://m.hztianpu.com/yun/44920.html

相關(guān)文章

  • Django搭建個(gè)人博客:用django-allauth實(shí)現(xiàn)第三方登錄

    摘要:比較流行的解決方案是允許用戶通過(guò)第三方登錄,即可以通過(guò)微博這類知名社區(qū)的授權(quán),從而登錄你的小站,免去了注冊(cè)的麻煩。微博微信的登錄方式大致都遵循這個(gè)流程本章雖然加載了微博的接口,但是限于篇幅并沒(méi)有配置,請(qǐng)讀者查閱官方文檔去實(shí)現(xiàn)。 現(xiàn)在我們已經(jīng)擁有一個(gè)可以進(jìn)行用戶本地登錄的博客系統(tǒng)了。如果有人欣賞你的文章,說(shuō)不定就會(huì)注冊(cè)成為本地用戶,并和你好好交流一番。 但頭疼的是,用戶可能每天都在互聯(lián)網(wǎng)...

    waruqi 評(píng)論0 收藏0
  • Django搭建個(gè)人博客:View視圖初探

    摘要:比如,在一個(gè)博客應(yīng)用中,你可能會(huì)創(chuàng)建如下幾個(gè)視圖博客首頁(yè)展示最近的幾項(xiàng)內(nèi)容。這些需求都靠視圖來(lái)完成。首先寫(xiě)一個(gè)最簡(jiǎn)單的視圖函數(shù),在瀏覽器中打印出字符串。調(diào)用函數(shù)時(shí)會(huì)返回一個(gè)含字符串的對(duì)象。換句話說(shuō),的作用是將映射到視圖中。 Django 中的視圖的概念是「一類具有相同功能和模板的網(wǎng)頁(yè)的集合」。比如,在一個(gè)博客應(yīng)用中,你可能會(huì)創(chuàng)建如下幾個(gè)視圖: 博客首頁(yè):展示最近的幾項(xiàng)內(nèi)容。 內(nèi)容詳情...

    Turbo 評(píng)論0 收藏0
  • Django搭建個(gè)人博客:用django-notifications實(shí)現(xiàn)消息通知

    摘要:接下來(lái)你就可以在項(xiàng)目的任何地方發(fā)送通知了像這樣其中的參數(shù)釋義發(fā)送通知的對(duì)象接收通知的對(duì)象動(dòng)詞短語(yǔ)鏈接到動(dòng)作的對(duì)象可選執(zhí)行通知的對(duì)象可選有點(diǎn)繞,舉個(gè)栗子杜賽在搭建個(gè)人博客中對(duì)你發(fā)表了評(píng)論。有疑問(wèn)請(qǐng)?jiān)诙刨惖膫€(gè)人網(wǎng)站留言,我會(huì)盡快回復(fù)。 憑借你勤奮的寫(xiě)作,拜讀你文章的用戶越來(lái)越多,他們的評(píng)論也分散在眾多的文章之中。作為博主,讀者的留言肯定是要都看的;而讀者給你留言,自然也希望得到回復(fù)。 怎么...

    Zoom 評(píng)論0 收藏0
  • Django搭建個(gè)人博客:創(chuàng)建并配置APP功能模塊

    摘要:創(chuàng)建在中的一個(gè)代表一個(gè)功能模塊。就是項(xiàng)目的基石,因此開(kāi)發(fā)博客的第一步就是創(chuàng)建新的,用來(lái)實(shí)現(xiàn)跟文章相關(guān)的功能模塊。注意之后,的必須配置,否則會(huì)報(bào)錯(cuò)??偨Y(jié)本章創(chuàng)建了博客文章功能的,學(xué)習(xí)了注冊(cè)并配置。 創(chuàng)建APP 在Django中的一個(gè)app代表一個(gè)功能模塊。開(kāi)發(fā)者可以將不同功能的模塊放在不同的app中, 方便代碼的復(fù)用。app就是項(xiàng)目的基石,因此開(kāi)發(fā)博客的第一步就是創(chuàng)建新的app,用來(lái)實(shí)現(xiàn)...

    沈儉 評(píng)論0 收藏0
  • Django搭建個(gè)人博客:在博文中發(fā)表評(píng)論

    摘要:確認(rèn)創(chuàng)建成功后,記得在中注冊(cè)因?yàn)槲覀兿腼@示發(fā)表評(píng)論的時(shí)間,修改時(shí)區(qū)設(shè)置為上海的時(shí)區(qū)。處理錯(cuò)誤請(qǐng)求發(fā)表評(píng)論僅接受請(qǐng)求。返回到一個(gè)適當(dāng)?shù)闹屑从脩舭l(fā)送評(píng)論后,重新定向到文章詳情頁(yè)面。總結(jié)本章實(shí)現(xiàn)了發(fā)表評(píng)論展示評(píng)論的功能。 在沒(méi)有互聯(lián)網(wǎng)的年代,我們用日記來(lái)記錄每天的心得體會(huì)。小的時(shí)候我有一個(gè)帶鎖的日記本,生怕被別人看見(jiàn)里面寫(xiě)了啥,鑰匙藏得那叫一個(gè)絕。 現(xiàn)在時(shí)代變了,網(wǎng)絡(luò)版的日記本:博客,卻巴不...

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

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

0條評(píng)論

閱讀需要支付1元查看
<