You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django新手求助:激活链接URL正则如何捕获id与token

Django账户激活链接URL配置解决方案

嘿,作为Django新手碰到这个问题太正常啦,我来帮你捋清楚关键要点~

首先要纠正一个常见误区:你发送的激活链接里的id和token是URL查询参数(也就是?后面的部分),不是URL路径的一部分,所以根本不需要在URL正则里写捕获规则!Django会自动把这些参数封装到request.GET对象里,你直接在视图里读取就行。

正确的URL配置

你只需要把URL规则写成匹配activate/这个路径即可:

url(r'^activate/$', ActivationView.as_view(), name='activate')

这里的$符号是为了确保只匹配到activate/结尾的路径,避免误匹配其他类似开头的URL。

修改你的视图类

你原来的get方法参数写法不对,应该把request作为第一个参数,然后通过request.GET获取查询参数:

from rest_framework.views import APIView
from rest_framework.response import Response

class ActivationView(APIView):
    def get(self, request):
        # 从查询参数中获取id和token
        user_id = request.GET.get('id')
        token = request.GET.get('token')
        
        # 先做参数校验,避免缺少必要参数的情况
        if not user_id or not token:
            return Response({"error": "缺少id或token参数"}, status=400)
        
        # 这里写你的账户激活逻辑,比如验证token有效性、修改用户激活状态等
        # 示例逻辑:
        # try:
        #     user = User.objects.get(id=user_id)
        #     if user.activation_token == token:
        #         user.is_active = True
        #         user.save()
        #         return Response({"message": "账户激活成功"}, status=200)
        #     else:
        #         return Response({"error": "无效的激活token"}, status=400)
        # except User.DoesNotExist:
        #     return Response({"error": "用户不存在"}, status=404)
        
        return Response({"message": "账户激活成功"}, status=200)

额外说明:如果是路径参数的情况

要是你之后想把参数放到URL路径里(比如链接变成http://localhost/api/v1/bouncer/activate/6/AE8C448C50C5249CF56DFDE893E2F6DD/),那才需要在URL正则里捕获参数,写法如下:

# 正则里用(?P<参数名>正则规则)来捕获路径参数
url(r'^activate/(?P<id>\d+)/(?P<token>[A-F0-9]+)/$', ActivationView.as_view(), name='activate')

对应的视图get方法就要改成接收这两个参数:

def get(self, request, id, token):
    # 直接使用id和token参数进行逻辑处理
    # ...

但根据你当前提供的激活链接格式,用查询参数的方案才是最适配的~

内容的提问来源于stack exchange,提问作者Melissa Stewart

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:49:58