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

Django路由传token时报ChangeEmailView() unexpected keyword argument错误如何解决

问题解决方法

错误原因

路由中配置了<str:token>路径参数,Django会自动将路径中对应位置的值作为token关键字参数传递给绑定的视图函数,但你的ChangeEmailView函数未声明接收该参数,因此触发参数不匹配错误。

解决步骤

  • 第一步:修改ChangeEmailView函数的参数定义,新增token入参,同时补充token合法性校验逻辑(避免伪造token访问),修改后代码如下:
@login_required(login_url='home:login')
def ChangeEmailView(request, token):
    # 先校验传入的token是否属于当前用户且未被使用
    packet = get_object_or_404(TempUrl, user=request.user, uid=token, used=False)
    if request.method == 'POST':
        objects = User.objects.get(email = request.user.email)
        form = EmailChangingForm(request.POST, instance=objects)
        if form.is_valid():
            form.save()
            # 修改邮箱成功后标记token为已使用,防止重复调用
            packet.used = True
            packet.save()
        return redirect('home:profilesettings')
    else:
        objects = User.objects.get(email = request.user.email)
        # 修正原代码问题:GET请求初始化表单不需要传入request.POST,避免触发非预期校验
        form = EmailChangingForm(instance=objects)
    context = {'form': form, 'token': token}
    return render(request, 'home/email_settings.html', context)
  • 第二步:优化路由配置(可选,符合Django默认路径规范),给路径末尾添加斜杠,避免Django触发自动重定向:
path('settings/email/changeemail/<str:token>/', views.ChangeEmailView , name="changeemail"),
  • 第三步:模板中生成跳转链接时正确携带token参数,在changeemail_pre.html中跳转修改邮箱页的链接写法如下:
<a href="{% url 'changeemail' token=token %}">点击修改邮箱</a>

如果是在视图中生成链接,可以用reverse函数:

from django.urls import reverse
url = reverse('changeemail', kwargs={'token': token})

以上修改完成后即可实现携带唯一有效token的修改邮箱URL功能,同时保证访问合法性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 13:06:03