Django 在验证用户时找不到重定向 url

Django can't find redirect url when authenticating user

我正在尝试登录以保护我的一些页面,包括我的仪表板。这是我网站根目录下的仪表板视图:sitename.com/

@login_required
def index(request):
    print(request.session['user_email'])
    context_dict = {}

    return render(request, 'dashboard/index.html', context_dict)

我的项目url文件:

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^job/', include('job.urls')),
    url(r'^welcome/', include('welcome.urls')), //the app for logging in
    url(r'^$', include('dashboard.urls')), //main dashboard app
    # s

]

我的仪表板应用程序 url 文件:

urlpatterns = [
    url(r'$', views.index, name='index'),
    url(r'^signup/$', views.signup, name='signup'),
    url(r'^login/$', views.auth_login, name='login'),
    url(r'^logout/$', views.user_logout, name='logout'),
]

当我尝试注销然后转到 / 我收到一条消息说 http://127.0.0.1:8000/welcome?next=/ 与我的项目 urls 文件中的任何 urls 不匹配。所以登录检查工作正常,只是在设置 GET 变量 next 时无法弄清楚 url 。

由于您正在使用来自 contrib.auth 的 django 默认登录,请尝试传递 next as an extra_context dict

url(r'^login/$', 'django.contrib.auth.views.login',
    {'template_name': 'login.html', 'extra_context': {'next':'/'}})

另一个解决方案是在 login_required 装饰器本身

中指定登录名 url
@login_required(login_url='/login/')
def index(request):
print(request.session['user_email'])
context_dict = {}

return render(request, 'dashboard/index.html', context_dict)

让我们知道这是否解决了您的问题。 HTH :)

我终于让它工作了。这是我的路线:

欢迎应用程序路由(用于记录的应用程序 in/out)

urlpatterns = [
    url(r'^$', views.index, name='index'),
    url(r'^signup/$', views.signup, name='signup'),
    url(r'^/login/$', views.auth_login, name='login'),
    url(r'^/logout', views.user_logout, name='logout'),
]

整个项目的主要路线:

urlpatterns = [
    url(r'^welcome', include('welcome.urls')),
    url(r'^', include('dashboard.urls')),

]

现在 url 中的下一个变量没有任何错误:

http://127.0.0.1:8000/welcome?next=/

我有一个 javascript 文件获取 next 的值并在用户成功登录时重定向到它。 *我使用 ajax 来验证用户。