摘要:比較流行的解決方案是允許用戶通過第三方登錄,即可以通過微博這類知名社區的授權,從而登錄你的小站,免去了注冊的麻煩。微博微信的登錄方式大致都遵循這個流程本章雖然加載了微博的接口,但是限于篇幅并沒有配置,請讀者查閱官方文檔去實現。
現在我們已經擁有一個可以進行用戶本地登錄的博客系統了。如果有人欣賞你的文章,說不定就會注冊成為本地用戶,并和你好好交流一番。
但頭疼的是,用戶可能每天都在互聯網上瀏覽很多非常棒的博客,如果每個博客都要去注冊才能評論,對用戶是個不小的負擔。對個人博客這類草根網站,說不定用戶就懶得去注冊了,你也就損失了一個潛在的”粉絲“。
比較流行的解決方案是允許用戶通過第三方登錄,即可以通過GitHub、微博這類知名社區的授權,從而登錄你的小站,免去了注冊的麻煩。
本章會介紹一個強大的庫:Django-allauth,它不僅包含一整套的本地注冊、登錄、管理的解決方案,還支持GitHub、Twitter、微博、微信甚至百度等幾十種第三方登錄方式,真的是當爹又當媽啊...
本地登錄先看看django-allauth的本地登錄如何配置。
安裝django-allauth:
(env) > pip install django-allauth
修改配置文件:
my_blog/settings.py ... TEMPLATES = [ { ... "OPTIONS": { "context_processors": [ # allauth 啟動必須項 "django.template.context_processors.request", ], }, }, ] AUTHENTICATION_BACKENDS = ( # Django 后臺可獨立于 allauth 登錄 "django.contrib.auth.backends.ModelBackend", # 配置 allauth 獨有的認證方法,如 email 登錄 "allauth.account.auth_backends.AuthenticationBackend", ) INSTALLED_APPS = [ ... # allauth 啟動必須項 "django.contrib.auth", "django.contrib.messages", "django.contrib.sites", "allauth", "allauth.account", "allauth.socialaccount", # 可添加需要的第三方登錄 "allauth.socialaccount.providers.github", "allauth.socialaccount.providers.weibo", ... ] # 設置站點 SITE_ID = 1 # 登錄成功后重定向地址 LOGIN_REDIRECT_URL = "/article/article-list" ...
注意上面的配置中,有的內容是創建項目時本來就有的,檢查一下你的項目中是否包含;有的內容是完全新增的,不要漏掉了。
django-allauth也是一個app,因此需要分配給它url:
my_blog/urls.py ... urlpatterns = [ ... path("accounts/", include("allauth.urls")), ... ]
最后一步是遷移數據:
(env) > python manage.py migrate
這就完成了!
輸入django-allauth的默認登錄頁面地址:
http://127.0.0.1:8000/accounts/login/
顯示頁面如下:
設置網站首頁教程到現在,我們的博客都還沒有分配首頁地址。
博客網站的首頁通常就是文章列表本身,因此把這個路由添加到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首頁啦。
美化模板django-allauth自帶的模板是簡陋的,需要覆寫為自己網站的風格才能使用。
還記得我們一直在使用的虛擬環境嗎?沒錯,所有項目運行所需的第三方庫都是保存在虛擬環境的文件夾中的,在本教程中也就是env文件夾了。找到下面的路徑:
envLibsite-packagesallauth emplatesaccountlogin.html
這個login.html就是原始的登錄模板文件了。雖然可以直接修改這個文件來優化頁面,但是這樣做是很蠢的,因為每當你升級庫、或者換臺電腦部署時,模板又恢復回去了。
正確的做法是復制這個login.html到你自己項目的templates文件夾中去。即你需要在項目中創建一個完全相同的路徑:
templatesaccountlogin.html
Django會優先在項目中尋找模板文件,因此只要相對路徑相同,則可以達到覆寫的目的。
接下來就可以愉快的定制風格了。
參考代碼如下:
templatesaccountlogin.html {% extends "base.html" %} {% load i18n %} {% load account socialaccount %} {% block title %}登錄{% endblock %} {% block content %}{% endblock %}
{% get_providers as socialaccount_providers %} {% if socialaccount_providers %}{% blocktrans with site.name as site_name %}請登錄已有本地賬號或注冊新賬號。 也可以通過第三方登錄:{% endblocktrans %}
{% include "socialaccount/snippets/login_extra.html" %} {% else %}第三方登錄:
本地登錄:
{% blocktrans %}If you have not created an account yet, then please sign up first.{% endblocktrans %}
{% endif %}
實際效果如下:
除了登錄頁面以外,其他的所有頁面,如注冊、郵箱認證頁面及郵件、第三方登錄頁面等都可以用這種方法進行覆寫。教程中就不再贅述,讀者請自行嘗試。
注冊接下來看看注冊頁面。
點擊注冊按鈕,則看到如下頁面:
需要注意的是郵箱這一項如果你填了,那么站點會自動向填寫的郵箱發送認證郵件。因此前面章節中講過的關于郵箱的配置一定要正確,否則就會得到一個ConnectionRefusedError的錯誤。相關的配置項如下:
my_blog/settings.py # SMTP服務器 EMAIL_HOST = "your smtp" # 郵箱名 EMAIL_HOST_USER = "your email" # 郵箱密碼 EMAIL_HOST_PASSWORD = "your password" # 發送郵件的端口 EMAIL_PORT = 25 # 是否使用 TLS EMAIL_USE_TLS = True # 默認的發件人 DEFAULT_FROM_EMAIL = "your email"
記得修改為你自己的郵箱配置。
另外需要注意的是django-allauth所注冊的賬號與django內置的本地賬號是通用的,也就是說通過內置User創建的賬號,是可以通過django-allauth登錄的。
有了django-allauth,之前教程中寫的用戶登錄、注冊以及密碼重置模塊統統都可以不要了。那既然如此,博主繞了這么大個彎不是坑人嗎?這個嘛,學習就是要變著法折騰..GitHub登錄
搞定了本地登錄,接下來的第三方登錄才是重點。
由于GitHub的第三方登錄是最容易的,因此作為例子來講解。
作為合格的程序員,怎么能沒有GitHub賬號!GitHub注冊OAuth
創建第三方登錄的第一步,是需要在GitHub網站上創建OAuth應用。登錄GitHub賬號,然后進入地址:
https://github.com/settings/applications/new
不排除以后這個地址會變,如果不對就麻煩讀者在個人主頁的settings里找一找OAuth的設置了。
進入頁面后,填寫一下內容:
填寫的是本地IP,以后部署在線上再修改成實際的域名。
注意callback URL填寫的內容。點擊確定后,就得到了應用的信息:
其中的Client ID和Client Secret就是要用到的憑證。
Django后臺配置然后對Django后臺進行設置。
進入后臺,你會發現多了幾個欄目:
打開Sites,將example.com修改為博客域名。開發時則修改為本地IP:
然后進入Social applications,添加一條applications如下:
注意最下面的Sites欄一定要把剛才添加的站點選擇到右邊去。
回到django-allauth的登錄頁面,點擊github登錄:
實現了GitHub登錄。
allauth配置項挑幾個比較重要的講一下。
ACCOUNT_EMAIL_VERIFICATION = "optional" / "mandatory" / "none":當其為mandatory時,本地注冊的用戶必須先驗證郵箱才可以登錄。optional和none都不要求驗證郵箱,區別是optional仍然會發送驗證郵件,而none連認證郵件都不會發送。
SOCIALACCOUNT_EMAIL_VERIFICATION = "optional" / "mandatory" / "none":同理,但是作用于第三方賬號的注冊。
ACCOUNT_AUTHENTICATION_METHOD = "username_email" / "user" / "email":指定登錄方法,即通過用戶名、郵箱進行登錄,或者兩者均可。
ACCOUNT_EMAIL_REQUIRED = True / False:注冊本地用戶時,是否必須填寫郵箱。
除此之外還有很多配置項,詳細了解請查閱官方文檔。
總結本章學習了通過django-allauth實現本地及GitHub登錄的功能。微博、微信的登錄方式大致都遵循這個流程;本章雖然加載了微博的接口,但是限于篇幅并沒有配置,請讀者查閱官方文檔去實現。需要注意的是國內的第三方登錄多半需要一兩天時間去申請、審核,要更加麻煩一些。
另外還剩下寫入口、刪除舊功能等收尾工作,就交給讀者自己去完成了。
提示一下,登錄的逆向解析地址為{% url "account_login" %},注冊為{% url "account_signup" %}。這些在原始模板文件或官方網站都能查到。
有疑問請在杜賽的個人網站留言,我會盡快回復。
或Email私信我:dusaiphoto@foxmail.com
項目完整代碼:Django_blog_tutorial
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/44110.html
摘要:聲明本博客的注冊登錄退出功能將使用,參考資源如下文檔教程安裝配置信息安裝后設置,將相關加入到里去。指定與特定配置文件相關聯的對象之數據庫的。因此并沒有提供用戶詳情應用用戶詳情請參考個人博客五用戶個人資料擴展 聲明:本博客的注冊登錄退出功能將使用django-allauth,參考資源如下:django-allauth文檔django-allauth教程 1、安裝django-allau...
摘要:聲明本博客的注冊登錄退出功能將使用,參考資源如下文檔教程安裝配置信息安裝后設置,將相關加入到里去。指定與特定配置文件相關聯的對象之數據庫的。因此并沒有提供用戶詳情應用用戶詳情請參考個人博客五用戶個人資料擴展 聲明:本博客的注冊登錄退出功能將使用django-allauth,參考資源如下:django-allauth文檔django-allauth教程 1、安裝django-allau...
摘要:教程看到這里,你已經學會如下內容搭建開發環境博文管理用戶管理發表評論若干小功能搭建簡單的小博客,以上的功能夠用了。教程為了起步平緩,沒有展開這方面的內容。陌生人,祝你學業進步事業有成歡迎常到杜賽的個人網站做客 教程看到這里,你已經學會如下內容: 搭建開發環境 博文管理 用戶管理 發表評論 若干小功能 搭建簡單的小博客,以上的功能夠用了。 相信你的志向不止于此。畢竟程序員面試個個造火...
摘要:接下來你就可以在項目的任何地方發送通知了像這樣其中的參數釋義發送通知的對象接收通知的對象動詞短語鏈接到動作的對象可選執行通知的對象可選有點繞,舉個栗子杜賽在搭建個人博客中對你發表了評論。有疑問請在杜賽的個人網站留言,我會盡快回復。 憑借你勤奮的寫作,拜讀你文章的用戶越來越多,他們的評論也分散在眾多的文章之中。作為博主,讀者的留言肯定是要都看的;而讀者給你留言,自然也希望得到回復。 怎么...
閱讀 1369·2021-11-25 09:43
閱讀 3582·2021-11-10 11:48
閱讀 5090·2021-09-23 11:21
閱讀 1597·2019-08-30 15:55
閱讀 3507·2019-08-30 13:53
閱讀 1234·2019-08-30 10:51
閱讀 867·2019-08-29 14:20
閱讀 1971·2019-08-29 13:11