如何修复Django邮箱验证URL的正则表达式匹配问题
问题核心原因
你发送的邮箱验证链接是通过查询参数(?token=xxx)传递token,但你的Django路由规则定义的是路径参数(要求token放在verify_email/之后),两者不匹配,因此触发404错误。
两种修复方案
任选其一即可解决问题:
方案一:修改路由适配查询参数
调整api.urls.py的路由规则,让它接收查询参数形式的token,无需在路径中捕获:
# api.urls.py from django.urls import path from . import views urlpatterns = [ path('verify_email/', views.verify_email, name="verify_email"), ]
然后在verify_email视图中通过request.GET获取token:
def verify_email(request): token = request.GET.get('token') # 此处编写邮箱验证逻辑
方案二:修改邮件链接适配路径参数
保持现有路由规则不变,调整生成验证链接的代码,把token嵌入路径而非作为查询参数。可以用Django的reverse函数生成标准URL:
from django.urls import reverse # 生成验证链接示例 token = "ddfddjrf....fddkfjdjh" # 根据路由名称和参数生成相对路径 verify_path = reverse('verify_email', kwargs={'token': token}) # 拼接成完整链接 full_verify_url = f"https://my_domain.com{verify_path}"
生成的链接会变成https://my_domain.com/api/verify_email/ddfddjrf....fddkfjdjh/,完全匹配你的现有路由规则。
额外语法修正
你提供的api.urls.py存在语法错误:列表闭合符号写成了[,应该改为],修正后代码如下:
# api.urls.py from django.urls import re_path from . import views urlpatterns = [ re_path(r'^verify_email/(?P<token>[\w.-]+)/', views.verify_email, name="verify_email"), ]
内容的提问来源于stack exchange,提问作者Axel Siebert
相关产品推荐
相关产品推荐

