欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

用django-allauth實(shí)現(xiàn)第三方登錄的示例代碼

 更新時(shí)間:2019年06月24日 08:27:25   作者:杜賽  
這篇文章主要介紹了用django-allauth實(shí)現(xiàn)第三方登錄的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

現(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)大的庫: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)登錄頁面地址:

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

顯示頁面如下:

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

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

博客網(wǎng)站的首頁通常就是文章列表本身,因此把這個(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首頁啦。

美化模板

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

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

env\Lib\site-packages\allauth\templates\account\login.html

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

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

templates\account\login.html

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

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

參考代碼如下:

templates\account\login.html


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

{% block content %}
<div class="container">
  <div class="row">
    <div class="col-12">
      <br>
      {% get_providers as socialaccount_providers %}
      {% if socialaccount_providers %}
      <p>
        {% blocktrans with site.name as site_name %}請(qǐng)登錄已有本地賬號(hào)或<a href="{{ signup_url }}">注冊(cè)</a>新賬號(hào)。
        也可以通過第三方登錄:{% endblocktrans %}
      </p>

      <div class="socialaccount_ballot">
        <h5 class="mb-2 mt-4">第三方登錄:</h5>
        <ul class="socialaccount_providers">
         {% include "socialaccount/snippets/provider_list.html" with process="login" %}
        </ul>
        <h5 class="mb-2 mt-4">本地登錄:</h5>
      </div>

      {% include "socialaccount/snippets/login_extra.html" %}

      {% else %}
      <p>{% blocktrans %}If you have not created an account yet, then please
      <a href="{{ signup_url }}">sign up</a> first.{% endblocktrans %}</p>
      {% endif %}
      <div class="col-6">
        <form class="login" id="login_form" method="POST" action="{% url 'account_login' %}">
          {% csrf_token %}
          <div class="form-group">
            <label for="id_login">賬號(hào): </label>
            <input type="text" name="login" placeholder="請(qǐng)輸入用戶名或Email" autofocus="autofocus" required
              id="id_login" class="form-control" />
            <small class="form-text text-muted ml-1">
              還沒有賬號(hào)?
              <a href="{% url 'account_signup' %}" style="color: cornflowerblue; ">
                注冊(cè)新賬號(hào)
              </a>
            </small>
          </div>
          <div class="form-group mb-1">
            <label for="id_password">
              密碼:
            </label>
            <input type="password" name="password" placeholder="請(qǐng)輸入密碼" required id="id_password"
              class="form-control" />
            <small class="form-text text-muted ml-1">
              <a class="secondaryAction layui-text" href="{% url 'account_reset_password' %}">
                忘記密碼?
              </a>
            </small>
          </div>
          <div class="custom-control custom-checkbox mb-2">
            <input type="checkbox" name="remember" id="id_remember" checked class="custom-control-input" />
            <label for="id_remember" class="custom-control-label">
              保持登錄
            </label>
          </div>
          <button class="primaryAction btn btn-primary" type="submit" hidden id="submit_login">確認(rèn)</button>
          <button class="primaryAction btn btn-primary" type="button" id="on_submit_login">確認(rèn)</button>
        </form>
      </div>
    </div>
  </div>
</div>
{% endblock %}

實(shí)際效果如下:

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

注冊(cè)

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

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

需要注意的是郵箱這一項(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è)人主頁的settings里找一找OAuth的設(shè)置了。

進(jìn)入頁面后,填寫一下內(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的登錄頁面,點(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)。需要注意的是國內(nèi)的第三方登錄多半需要一兩天時(shí)間去申請(qǐng)、審核,要更加麻煩一些。

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

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

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

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳談套接字中SO_REUSEPORT和SO_REUSEADDR的區(qū)別

    詳談套接字中SO_REUSEPORT和SO_REUSEADDR的區(qū)別

    下面小編就為大家分享一篇詳談套接字中SO_REUSEPORT和SO_REUSEADDR的區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • 詳解Python的hasattr() getattr() setattr() 函數(shù)使用方法

    詳解Python的hasattr() getattr() setattr() 函數(shù)使用方法

    這篇文章主要介紹了詳解Python的hasattr() getattr() setattr() 函數(shù)使用方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-07-07
  • 在Django的模型中添加自定義方法的示例

    在Django的模型中添加自定義方法的示例

    這篇文章主要介紹了在Django的模型中添加自定義方法的示例,Django是Python豐富多彩的web開發(fā)框架中最具人氣的一個(gè),需要的朋友可以參考下
    2015-07-07
  • pytorch之深度神經(jīng)網(wǎng)絡(luò)概念全面整理

    pytorch之深度神經(jīng)網(wǎng)絡(luò)概念全面整理

    這篇文章主要介紹了pytorch之深度神經(jīng)網(wǎng)絡(luò)概念,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • 詳解Django的MVT設(shè)計(jì)模式

    詳解Django的MVT設(shè)計(jì)模式

    本章我們將介紹下經(jīng)典的軟件開發(fā)所遵循的MVC (Model-View-Controller, 模型-視圖-控制器) 設(shè)計(jì)模式以及Django的MVT設(shè)計(jì)模式(Model-View-Template)是如何遵循這種設(shè)計(jì)理念的。
    2021-04-04
  • Python獲取圖片像素BGR值并生成純色圖

    Python獲取圖片像素BGR值并生成純色圖

    這篇文章主要介紹了利用Python獲取圖片像素BGR值,并將其生成純色圖。文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-01-01
  • 詳解Python Socket網(wǎng)絡(luò)編程

    詳解Python Socket網(wǎng)絡(luò)編程

    這篇文章主要為大家介紹了Python Socket網(wǎng)絡(luò)編程,主要介紹使用 Python 進(jìn)行 TCP Socket網(wǎng)絡(luò)編程
    2016-01-01
  • python抽取指定url頁面的title方法

    python抽取指定url頁面的title方法

    今天小編就為大家分享一篇python抽取指定url頁面的title方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • 教你如何在Django 1.6中正確使用 Signal

    教你如何在Django 1.6中正確使用 Signal

    因?yàn)樾碌膁jango開發(fā)人員得知signal之后, 往往會(huì)很高興去使用它. 他們?cè)谀苁褂胹ignal的地方就使用signal, 并且這是他們覺得自己是django專家一樣. 然而, 像這樣編碼一段時(shí)間后, django項(xiàng)目就會(huì)變得異常復(fù)雜, 許多內(nèi)容都糾結(jié)在一起無法解開.
    2014-06-06
  • PyCharm如何導(dǎo)入python項(xiàng)目的方法

    PyCharm如何導(dǎo)入python項(xiàng)目的方法

    這篇文章主要介紹了PyCharm如何導(dǎo)入python項(xiàng)目的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02

最新評(píng)論