Python Django:從零開始的Google身份驗證和郵件獲取


Python Django是一個強大的Web框架,以其簡化開發流程並使開發人員能夠建立強大且功能豐富的Web應用程式的能力而聞名。在本文中,我們將探討Django中兩個關鍵功能的整合:Google身份驗證和郵件獲取。透過將Django與Google身份驗證的整合以及利用Google API客戶端庫無縫結合,開發人員可以使用其Google憑據為使用者提供安全的登入體驗。此外,使用者可以方便地在Django應用程式中獲取並與他們的Gmail郵件進行互動。

本文將提供有關從頭開始實現Google身份驗證和郵件獲取的分步指南,並附帶示例和輸出。無論您是構建訊息傳遞平臺、基於電子郵件的應用程式,還是尋求增強您的Django專案,本文都將為您提供在Django專案中無縫整合Google身份驗證和郵件獲取所需知識和工具。

首先,確保您的Python環境中已安裝Django和django-allauth。您可以使用pip安裝它們:

pip install django django-allauth

安裝所需的軟體包後,您可以開始在Django應用程式中設定Google身份驗證。首先,開啟專案的settings.py檔案,並將'allauth'和'allauth.account'新增到INSTALLED_APPS列表中。

INSTALLED_APPS = [
    ...
    'allauth',
    'allauth.account',
    ...
]

接下來,透過將以下幾行新增到您的settings.py檔案中來配置身份驗證後端。

AUTHENTICATION_BACKENDS = [
    'django.contrib.auth.backends.ModelBackend',
    'allauth.account.auth_backends.AuthenticationBackend',]

配置身份驗證後端後,下一步是在settings.py檔案中提供Google OAuth憑據。

這是一個示例:

SOCIALACCOUNT_PROVIDERS = {
    'google': {
        'SCOPE': ['profile', 'email'],
        'AUTH_PARAMS': {'access_type': 'online'},
    }
}

請確保將'client_id'和'client_secret'值替換為您從Google Developers Console獲得的自身憑據。

完成身份驗證設定後,我們現在可以建立登入和登出功能所需的檢視和模板。這是一個示例程式碼:

from allauth.socialaccount.providers.google.views import GoogleOAuth2Adapter
from allauth.socialaccount.providers.oauth2.client import OAuth2Client
from rest_auth.registration.views import SocialLoginView

class GoogleLogin(SocialLoginView):
    adapter_class = GoogleOAuth2Adapter
    client_class = OAuth2Client

在您的urls.py檔案中,包含以下程式碼:

from .views import GoogleLogin

urlpatterns = [
    ...
    path('accounts/google/login/', GoogleLogin.as_view(), name='google_login'),
    ...
]

現在,我們可以在您的模板中包含一個連結或按鈕來啟動Google身份驗證過程。例如:

<a href="{% url 'google_login' %}">Login with Google</a>

點選提供的連結後,我們將被重定向到Google登入頁面,以使用我們自己的Google憑據進行身份驗證。成功身份驗證後,我們將無縫返回到我們的Django應用程式,準備探索其功能。現在,讓我們開啟Python Django和Google API客戶端庫來從Gmail獲取電子郵件,簡化連線各種Google服務的流程。

首先,確保我們已安裝google-api-python-client軟體包:

pip install google-api-python-client

要訪問Gmail,我們需要在Google Developers Console中啟用Gmail API。如果您尚未建立新專案,請啟用Gmail API併為您的專案生成API憑據(OAuth客戶端ID)。

獲得API憑據後,我們可以使用API憑據對Gmail API進行身份驗證和授權訪問。在您的Django專案中建立一個名為gmail.py的檔案,並新增以下程式碼:

import os
import pickle
import base64
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request
from googleapiclient.discovery import build

# Define the SCOPES required for accessing Gmail
SCOPES = ['https://www.googleapis.com/auth/gmail.readonly']

def get_gmail_service():
    # Load or create the token file for authentication
    token_file = 'token.pickle'
    creds = None

    if os.path.exists(token_file):
        with open(token_file, 'rb') as token:
            creds = pickle.load(token)
    
    # If there are no valid credentials, authenticate the user
    if not creds or not creds.valid:
        if creds and creds.expired and creds.refresh_token:
            creds.refresh(Request())
        else:
            flow = InstalledAppFlow.from_client_secrets_file('credentials.json', SCOPES)
            creds = flow.run_local_server(port=0)
        
        # Save the credentials for future use
        with open(token_file, 'wb') as token:
            pickle.dump(creds, token)
    
    # Create a Gmail service instance
    service = build('gmail', 'v1', credentials=creds)
    
    return service

def fetch_emails():
    # Get the Gmail service
    service = get_gmail_service()

    # Fetch the emails from the user's Gmail inbox
    results = service.users().messages().list(userId='me', labelIds=['INBOX']).execute()
    emails = results.get('messages', [])

    if not emails:
        print('No emails found.')
    else:
        print('Emails:')
        for email in emails:
            msg = service.users().messages().get(userId='me', id=email['id']).execute()
            print(f"Subject: {msg['subject']}")
            print(f"From: {msg['from']}")
            print(f"Snippet: {msg['snippet']}")
            print('---')
# Call the fetch_emails() function to test
fetch_emails()

在程式碼中,我們定義了Gmail訪問所需的範圍並匯入了必要的庫。get_gmail_service()方法建立與Gmail API的連線並對使用者進行身份驗證。使用者憑據安全地儲存在token.pickle檔案中並從中檢索。這使得能夠在Django應用程式中安全有效地訪問使用者的Gmail帳戶,從而確保身份驗證體驗。

fetch_emails()函式使用Gmail API方法users().messages().list()和users().messages().get()從使用者的Gmail收件箱中檢索電子郵件。它列印每封電子郵件的主題、發件人和摘要。

要執行程式碼並獲取電子郵件,請確保credentials.json檔案位於與gmail.py檔案相同的目錄中。

這是一個示例:

python gmail.py

這將對使用者進行身份驗證並列印從使用者Gmail收件箱中獲取的電子郵件的詳細資訊。

結論

總而言之,Python Django提供了一種無縫且安全的方式來在您的Web應用程式中實現Google身份驗證和郵件獲取。透過Django-allauth和Google API客戶端庫,我們可以輕鬆地使用使用者的Google憑據啟用登入並訪問其Gmail收件箱。此整合為構建以電子郵件為中心的應用程式(例如訊息系統、電子郵件分析等)開闢了廣泛的可能性。

藉助Django強大的框架和Google API的功能,我們可以建立功能豐富的應用程式,從而簡化使用者身份驗證並增強與電子郵件相關的功能。Python Django確實簡化了從頭開始整合Google身份驗證和郵件獲取的過程。

更新於:2023年7月25日

瀏覽量:572

啟動您的職業生涯

完成課程後獲得認證

開始
廣告
© . All rights reserved.