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

資訊專欄INFORMATION COLUMN

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

waruqi / 1128人閱讀

摘要:比較流行的解決方案是允許用戶通過第三方登錄,即可以通過微博這類知名社區(qū)的授權(quán),從而登錄你的小站,免去了注冊(cè)的麻煩。微博微信的登錄方式大致都遵循這個(gè)流程本章雖然加載了微博的接口,但是限于篇幅并沒有配置,請(qǐng)讀者查閱官方文檔去實(shí)現(xiàn)。

現(xiàn)在我們已經(jīng)擁有一個(gè)可以進(jìn)行用戶本地登錄的博客系統(tǒng)了。如果有人欣賞你的文章,說不定就會(huì)注冊(cè)成為本地用戶,并和你好好交流一番。

但頭疼的是,用戶可能每天都在互聯(lián)網(wǎng)上瀏覽很多非常棒的博客,如果每個(gè)博客都要去注冊(cè)才能評(píng)論,對(duì)用戶是個(gè)不小的負(fù)擔(dān)。對(duì)個(gè)人博客這類草根網(wǎng)站,說不定用戶就懶得去注冊(cè)了,你也就損失了一個(gè)潛在的”粉絲“。

比較流行的解決方案是允許用戶通過第三方登錄,即可以通過GitHub、微博這類知名社區(qū)的授權(quán),從而登錄你的小站,免去了注冊(cè)的麻煩。

本章會(huì)介紹一個(gè)強(qiáng)大的庫(kù):Django-allauth,它不僅包含一整套的本地注冊(cè)、登錄、管理的解決方案,還支持GitHub、Twitter、微博、微信甚至百度等幾十種第三方登錄方式,真的是當(dāng)?shù)之?dāng)媽啊...

本地登錄

先看看django-allauth的本地登錄如何配置。

安裝django-allauth

(env) > pip install django-allauth

修改配置文件:

my_blog/settings.py

...


TEMPLATES = [
    {
        ...
        "OPTIONS": {
            "context_processors": [
                # allauth 啟動(dòng)必須項(xiàng)
                "django.template.context_processors.request",
            ],
        },
    },
]


AUTHENTICATION_BACKENDS = (
    # Django 后臺(tái)可獨(dú)立于 allauth 登錄
    "django.contrib.auth.backends.ModelBackend",

    # 配置 allauth 獨(dú)有的認(rèn)證方法,如 email 登錄
    "allauth.account.auth_backends.AuthenticationBackend",
)


INSTALLED_APPS = [
    ...
    # allauth 啟動(dòng)必須項(xiàng)
    "django.contrib.auth",
    "django.contrib.messages",
    "django.contrib.sites",

    "allauth",
    "allauth.account",
    "allauth.socialaccount",
    
    # 可添加需要的第三方登錄
    "allauth.socialaccount.providers.github",
    "allauth.socialaccount.providers.weibo",
    ...
]

# 設(shè)置站點(diǎn)
SITE_ID = 1

# 登錄成功后重定向地址
LOGIN_REDIRECT_URL = "/article/article-list"

...

注意上面的配置中,有的內(nèi)容是創(chuàng)建項(xiàng)目時(shí)本來就有的,檢查一下你的項(xiàng)目中是否包含;有的內(nèi)容是完全新增的,不要漏掉了。

django-allauth也是一個(gè)app,因此需要分配給它url

my_blog/urls.py

...

urlpatterns = [
    ...
    path("accounts/", include("allauth.urls")),
    ...
]

最后一步是遷移數(shù)據(jù):

(env) > python manage.py migrate

這就完成了!

輸入django-allauth的默認(rèn)登錄頁(yè)面地址:

http://127.0.0.1:8000/accounts/login/

顯示頁(yè)面如下:

設(shè)置網(wǎng)站首頁(yè)

教程到現(xiàn)在,我們的博客都還沒有分配首頁(yè)地址。

博客網(wǎng)站的首頁(yè)通常就是文章列表本身,因此把這個(gè)路由添加到my_blog/urls.py中:

my_blog/urls.py

...
from article.views import article_list

urlpatterns = [
    # home
    path("", article_list, name="home"),
    ...
]
...

再把登錄成功后的重定向地址改過來:

my_blog/settings.py

...
# 重定向 url
#LOGIN_REDIRECT_URL = "/article/article-list"
LOGIN_REDIRECT_URL = "/"

這樣就擁有地址為http://127.0.0.1:8000首頁(yè)啦。

美化模板

django-allauth自帶的模板是簡(jiǎn)陋的,需要覆寫為自己網(wǎng)站的風(fēng)格才能使用。

還記得我們一直在使用的虛擬環(huán)境嗎?沒錯(cuò),所有項(xiàng)目運(yùn)行所需的第三方庫(kù)都是保存在虛擬環(huán)境的文件夾中的,在本教程中也就是env文件夾了。找到下面的路徑:

envLibsite-packagesallauth	emplatesaccountlogin.html

這個(gè)login.html就是原始的登錄模板文件了。雖然可以直接修改這個(gè)文件來優(yōu)化頁(yè)面,但是這樣做是很蠢的,因?yàn)槊慨?dāng)你升級(jí)庫(kù)、或者換臺(tái)電腦部署時(shí),模板又恢復(fù)回去了。

正確的做法是復(fù)制這個(gè)login.html到你自己項(xiàng)目的templates文件夾中去。即你需要在項(xiàng)目中創(chuàng)建一個(gè)完全相同的路徑

templatesaccountlogin.html
Django會(huì)優(yōu)先在項(xiàng)目中尋找模板文件,因此只要相對(duì)路徑相同,則可以達(dá)到覆寫的目的。

接下來就可以愉快的定制風(fēng)格了。

參考代碼如下:

templatesaccountlogin.html


{% extends "base.html" %}
{% load i18n %}
{% load account socialaccount %}
{% block title %}登錄{% endblock %}

{% block content %}

{% get_providers as socialaccount_providers %} {% if socialaccount_providers %}

{% blocktrans with site.name as site_name %}請(qǐng)登錄已有本地賬號(hào)或注冊(cè)新賬號(hào)。 也可以通過第三方登錄:{% endblocktrans %}

第三方登錄:
    {% include "socialaccount/snippets/provider_list.html" with process="login" %}
本地登錄:
{% include "socialaccount/snippets/login_extra.html" %} {% else %}

{% blocktrans %}If you have not created an account yet, then please sign up first.{% endblocktrans %}

{% endif %}
{% endblock %}

實(shí)際效果如下:

除了登錄頁(yè)面以外,其他的所有頁(yè)面,如注冊(cè)、郵箱認(rèn)證頁(yè)面及郵件、第三方登錄頁(yè)面等都可以用這種方法進(jìn)行覆寫。教程中就不再贅述,讀者請(qǐng)自行嘗試。

注冊(cè)

接下來看看注冊(cè)頁(yè)面。

點(diǎn)擊注冊(cè)按鈕,則看到如下頁(yè)面:

需要注意的是郵箱這一項(xiàng)如果你填了,那么站點(diǎn)會(huì)自動(dòng)向填寫的郵箱發(fā)送認(rèn)證郵件。因此前面章節(jié)中講過的關(guān)于郵箱的配置一定要正確,否則就會(huì)得到一個(gè)ConnectionRefusedError的錯(cuò)誤。相關(guān)的配置項(xiàng)如下:

my_blog/settings.py

# SMTP服務(wù)器
EMAIL_HOST = "your smtp"
# 郵箱名
EMAIL_HOST_USER = "your email"
# 郵箱密碼
EMAIL_HOST_PASSWORD = "your password"
# 發(fā)送郵件的端口
EMAIL_PORT = 25
# 是否使用 TLS
EMAIL_USE_TLS = True
# 默認(rèn)的發(fā)件人
DEFAULT_FROM_EMAIL = "your email"

記得修改為你自己的郵箱配置。

另外需要注意的是django-allauth所注冊(cè)的賬號(hào)與django內(nèi)置的本地賬號(hào)是通用的,也就是說通過內(nèi)置User創(chuàng)建的賬號(hào),是可以通過django-allauth登錄的。

有了django-allauth,之前教程中寫的用戶登錄、注冊(cè)以及密碼重置模塊統(tǒng)統(tǒng)都可以不要了。那既然如此,博主繞了這么大個(gè)彎不是坑人嗎?這個(gè)嘛,學(xué)習(xí)就是要變著法折騰..
GitHub登錄

搞定了本地登錄,接下來的第三方登錄才是重點(diǎn)。

由于GitHub的第三方登錄是最容易的,因此作為例子來講解。

作為合格的程序員,怎么能沒有GitHub賬號(hào)!
GitHub注冊(cè)O(shè)Auth

創(chuàng)建第三方登錄的第一步,是需要在GitHub網(wǎng)站上創(chuàng)建OAuth應(yīng)用。登錄GitHub賬號(hào),然后進(jìn)入地址:

https://github.com/settings/applications/new

不排除以后這個(gè)地址會(huì)變,如果不對(duì)就麻煩讀者在個(gè)人主頁(yè)的settings里找一找OAuth的設(shè)置了。

進(jìn)入頁(yè)面后,填寫一下內(nèi)容:

填寫的是本地IP,以后部署在線上再修改成實(shí)際的域名。

注意callback URL填寫的內(nèi)容。點(diǎn)擊確定后,就得到了應(yīng)用的信息:

其中的Client IDClient Secret就是要用到的憑證。

Django后臺(tái)配置

然后對(duì)Django后臺(tái)進(jìn)行設(shè)置。

進(jìn)入后臺(tái),你會(huì)發(fā)現(xiàn)多了幾個(gè)欄目:

打開Sites,將example.com修改為博客域名。開發(fā)時(shí)則修改為本地IP:

然后進(jìn)入Social applications,添加一條applications如下:

注意最下面的Sites一定要把剛才添加的站點(diǎn)選擇到右邊去。

回到django-allauth的登錄頁(yè)面,點(diǎn)擊github登錄:

實(shí)現(xiàn)了GitHub登錄。

allauth配置項(xiàng)

挑幾個(gè)比較重要的講一下。

ACCOUNT_EMAIL_VERIFICATION = "optional" / "mandatory" / "none":當(dāng)其為mandatory時(shí),本地注冊(cè)的用戶必須先驗(yàn)證郵箱才可以登錄。optionalnone都不要求驗(yàn)證郵箱,區(qū)別是optional仍然會(huì)發(fā)送驗(yàn)證郵件,而none連認(rèn)證郵件都不會(huì)發(fā)送。

SOCIALACCOUNT_EMAIL_VERIFICATION = "optional" / "mandatory" / "none":同理,但是作用于第三方賬號(hào)的注冊(cè)。

ACCOUNT_AUTHENTICATION_METHOD = "username_email" / "user" / "email":指定登錄方法,即通過用戶名、郵箱進(jìn)行登錄,或者兩者均可。

ACCOUNT_EMAIL_REQUIRED = True / False:注冊(cè)本地用戶時(shí),是否必須填寫郵箱。

除此之外還有很多配置項(xiàng),詳細(xì)了解請(qǐng)查閱官方文檔。

總結(jié)

本章學(xué)習(xí)了通過django-allauth實(shí)現(xiàn)本地及GitHub登錄的功能。微博、微信的登錄方式大致都遵循這個(gè)流程;本章雖然加載了微博的接口,但是限于篇幅并沒有配置,請(qǐng)讀者查閱官方文檔去實(shí)現(xiàn)。需要注意的是國(guó)內(nèi)的第三方登錄多半需要一兩天時(shí)間去申請(qǐng)、審核,要更加麻煩一些。

另外還剩下寫入口、刪除舊功能等收尾工作,就交給讀者自己去完成了。

提示一下,登錄的逆向解析地址為{% url "account_login" %},注冊(cè)為{% url "account_signup" %}。這些在原始模板文件或官方網(wǎng)站都能查到。

有疑問請(qǐng)?jiān)诙刨惖膫€(gè)人網(wǎng)站留言,我會(huì)盡快回復(fù)。

或Email私信我:dusaiphoto@foxmail.com

項(xiàng)目完整代碼:Django_blog_tutorial

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/44110.html

相關(guān)文章

  • 個(gè)人博客四|注冊(cè)登錄退出功能后臺(tái)開發(fā)

    摘要:聲明本博客的注冊(cè)登錄退出功能將使用,參考資源如下文檔教程安裝配置信息安裝后設(shè)置,將相關(guān)加入到里去。指定與特定配置文件相關(guān)聯(lián)的對(duì)象之?dāng)?shù)據(jù)庫(kù)的。因此并沒有提供用戶詳情應(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ù)庫(kù)的。因此并沒有提供用戶詳情應(yīng)用用戶詳情請(qǐng)參考個(gè)人博客五用戶個(gè)人資料擴(kuò)展 聲明:本博客的注冊(cè)登錄退出功能將使用django-allauth,參考資源如下:django-allauth文檔django-allauth教程 1、安裝django-allau...

    sushi 評(píng)論0 收藏0
  • Django搭建個(gè)人博客:結(jié)束和開始

    摘要:教程看到這里,你已經(jīng)學(xué)會(huì)如下內(nèi)容搭建開發(fā)環(huán)境博文管理用戶管理發(fā)表評(píng)論若干小功能搭建簡(jiǎn)單的小博客,以上的功能夠用了。教程為了起步平緩,沒有展開這方面的內(nèi)容。陌生人,祝你學(xué)業(yè)進(jìn)步事業(yè)有成歡迎常到杜賽的個(gè)人網(wǎng)站做客 教程看到這里,你已經(jīng)學(xué)會(huì)如下內(nèi)容: 搭建開發(fā)環(huán)境 博文管理 用戶管理 發(fā)表評(píng)論 若干小功能 搭建簡(jiǎn)單的小博客,以上的功能夠用了。 相信你的志向不止于此。畢竟程序員面試個(gè)個(gè)造火...

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

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

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

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

0條評(píng)論

閱讀需要支付1元查看
<