成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Django搭建個人博客:用戶的注冊

leanote / 1217人閱讀

摘要:既然有登錄登出,那么用戶的注冊肯定也是少不了的。用戶在注冊成功后會自動登錄并返回博客列表頁面。總結(jié)本章用到了表單類對數(shù)據(jù)進行驗證清洗等知識,完成了用戶的注冊功能。

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

注冊表單類

用戶注冊時會用到表單來提交賬號、密碼等數(shù)據(jù),所以需要寫注冊用的表單/userprofile/forms.py

/userprofile/forms.py

...

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

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

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

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

這里我們覆寫了password字段,因為通常在注冊時需要重復輸入password來確保用戶沒有將密碼輸入錯誤,所以覆寫掉它以便我們自己進行數(shù)據(jù)的驗證工作。def clean_password2()中的內(nèi)容便是在驗證密碼是否一致了。def clean_[字段]這種寫法Django會自動調(diào)用,來對單個字段的數(shù)據(jù)進行驗證清洗。

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

需要注意:

驗證密碼一致性方法不能寫def clean_password(),因為如果你不定義def clean_password2()方法,會導致password2中的數(shù)據(jù)被Django判定為無效數(shù)據(jù)從而清洗掉,從而password2屬性不存在。最終導致兩次密碼輸入始終會不一致,并且很難判斷出錯誤原因。

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

視圖函數(shù)

編寫注冊的視圖/userprofile/views.py

/userprofile/views.py

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

# 用戶注冊
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)
            # 設置密碼
            new_user.set_password(user_register_form.cleaned_data["password"])
            new_user.save()
            # 保存好數(shù)據(jù)后立即登錄并返回博客列表頁面
            login(request, new_user)
            return redirect("article:article_list")
        else:
            return HttpResponse("注冊表單輸入有誤。請重新輸入~")
    elif request.method == "GET":
        user_register_form = UserRegisterForm()
        context = { "form": user_register_form }
        return render(request, "userprofile/register.html", context)
    else:
        return HttpResponse("請使用GET或POST請求數(shù)據(jù)")

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

用戶在注冊成功后會自動登錄并返回博客列表頁面。

模板和url

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

/templates/userprofile/register.html

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

{% csrf_token %}
{% endblock content %}

上面的模板文件中,我們在昵稱、密碼input 標簽中添加了required屬性(前面提到過)。如果用戶不填寫帶有required屬性的字段,表單就不能提交,并提示用戶填寫。實際上前面學習的很多表單都可以添加required屬性來提前驗證數(shù)據(jù)的有效性。

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

/templates/userprofile/login.html

...

還沒有賬號?
點擊注冊賬號加入我們吧!

...
...

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

/userprofile/urls.py

...

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

運行服務器,進入到登錄頁面,多了注冊的提示:

點擊注冊賬號進入注冊頁面:

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

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

總結(jié)

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

接下來學習如何實現(xiàn)刪除已有的用戶。

有疑問請在杜賽的個人網(wǎng)站留言,我會盡快回復。

或Email私信我:[email protected]

項目完整代碼:Django_blog_tutorial

轉(zhuǎn)載請告知作者并注明出處。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/44920.html

相關文章

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

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

    waruqi 評論0 收藏0
  • Django搭建個人博客:View視圖初探

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

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

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

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

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

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

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

    Jinkey 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<