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

Django使用dj-rest-auth注册时出现NoReverseMatch错误求助

解决dj-rest-auth中account_confirm_email反向解析失败的问题

问题场景

作为Django新手,尝试用dj-rest-auth实现邮箱验证和社交认证时,注册用户触发错误:

django.urls.exceptions.NoReverseMatch: Reverse for 'account_confirm_email' not found

将邮箱验证相关URL从app级urls.py移到项目级后功能恢复正常,想了解错误原因。

项目级urls.py代码

from drf_spectacular.views import (
    SpectacularAPIView,
    SpectacularSwaggerView
)
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    # path('account/', include('allauth.urls')),
    path('admin/', admin.site.urls),
    path('api/user/', include('user.urls')),
    path('api/schema/', SpectacularAPIView.as_view(), name='api-schema'),
    path(
        'api/docs/',
        SpectacularSwaggerView.as_view(url_name='api-schema'),
        name='api-docs'
    ),
]

app级user/urls.py代码

from django.urls import path, re_path
from dj_rest_auth.registration.views import RegisterView, VerifyEmailView, ConfirmEmailView
from dj_rest_auth.views import LoginView, LogoutView


from user import views

app_name = 'user'

urlpatterns = [
    path('account-confirm-email/<str:key>/', ConfirmEmailView.as_view()),
    path('register/', RegisterView.as_view()),
    path('login/', LoginView.as_view()),
    path('logout/', LogoutView.as_view()),

    path('verify-email/',
         VerifyEmailView.as_view(), name='rest_verify_email'),
    path('account-confirm-email/',
         VerifyEmailView.as_view(), name='account_email_verification_sent'),
    re_path(r'^account-confirm-email/(?P<key>[-:\w]+)/$',
            VerifyEmailView.as_view(), name='account_confirm_email'),
    path('listusers/', views.ListUsers.as_view(), name='list-users'),
]

错误原因分析

核心问题出在URL命名空间上:

  1. 你的app级urls.py设置了app_name='user',这意味着该文件内定义的所有URL名称(比如account_confirm_email)都属于user命名空间,反向解析时需要用user:account_confirm_email的格式才能找到。
  2. dj-rest-auth(底层依赖django-allauth)在生成邮箱验证链接时,默认是直接在全局命名空间中查找account_confirm_email这个URL名称,没有指定user命名空间,所以会出现反向解析失败的错误。
  3. 当你把邮箱验证相关URL移到项目级urls.py后,这些URL名称处于全局命名空间下,dj-rest-auth能直接找到对应的URL,因此功能恢复正常。

另外注意:你的app级urls.py里还重复定义了account-confirm-email/<str:key>/的路径,这也可能引发冲突,建议清理重复的URL规则。

内容的提问来源于stack exchange,提问作者Dubey sai vithal teja

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 19:45:41