Python Django:从头开始实现 Google 身份验证和获取邮件

pythondjangoprogramming

Python Django 是一个功能强大的 Web 框架,以简化开发过程和使开发人员能够创建功能强大且功能丰富的 Web 应用程序而闻名。在本文中,我们将探讨 Django 中两个关键功能的集成:Google 身份验证和获取电子邮件。通过无缝结合 Django 与 Google 身份验证的集成并利用 Google API 客户端库,开发人员可以使用他们的 Google 凭据为用户提供安全的登录体验。此外,用户可以方便地在 Django 应用程序中获取和与他们的 Gmail 消息交互。

本文将提供有关从头开始实施 Google 身份验证和电子邮件获取的分步指南,并附带示例和输出。无论您是在构建消息传递平台、基于电子邮件的应用程序,还是寻求增强 Django 项目,本文都会为您提供将 Google 身份验证和电子邮件提取无缝整合到 Django 项目中所需的知识和工具。

首先,请确保您的 Python 环境中安装了 Django 和 Django-all auth。您可以使用 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 凭据,我们就可以使用它们对 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

# 定义访问 Gmail 所需的范围
SCOPES = ['https://www.googleapis.com/auth/gmail.readonly']

def get_gmail_service():
    # 加载或创建用于身份验证的令牌文件
    token_file = 'token.pickle'
    creds = None

    if os.path.exists(token_file):
        with open(token_file, 'rb') as token:
            creds = pickle.load(token)
    
    # 如果没有有效的凭证,则验证用户身份
    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)
        
        # 保存凭证以供将来使用
        with open(token_file, 'wb') as token:
            pickle.dump(creds, token)
    
    # 创建 Gmail 服务实例
    service = build('gmail', 'v1', credentials=creds)
    
    return service

def fetch_emails():
    # 获取 Gmail 服务
    service = get_gmail_service()

    # 从用户的 Gmail 收件箱中获取电子邮件
    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('---')
# 调用 fetch_emails() 函数进行测试
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 提供了一种无缝且安全的方式来实现 Google 身份验证并在您的 Web 应用程序中获取电子邮件。通过 Django-allauth 和 Google API 客户端库,我们可以轻松地让用户使用他们的 Google 凭据登录并访问他们的 Gmail 收件箱。这种集成为构建以电子邮件为中心的应用程序开辟了广泛的可能性,例如消息传递系统、电子邮件分析等。

借助 Django 强大的框架和 Google 强大的 API,我们可以创建功能丰富的应用程序,简化用户身份验证并增强电子邮件相关功能。Python Django 真正简化了集成 Google 身份验证和从头开始获取电子邮件的过程。


相关文章