在验证用户身份时,Django无法找到重定向URL

时间:2016-12-30 04:20:24

标签: django authentication django-urls python-decorators

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

public void onClick4(View v) 
{
    if (option4Text.getText().toString().equals(toString(answer))) {
        TextView questionText = (TextView) findViewById(R.id.question);
        correctAnswer();
        questionText.setText(questionTxt + "");
    }
}

我的项目网址文件:

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

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

我的信息中心应用程序网址文件:

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

]

当我尝试注销然后转到/我收到一条消息,指出http://127.0.0.1:8000/welcome?next=/与我的项目网址文件中的任何网址都不匹配。所以登录检查工作正常,当设置下一个GET变量时,它无法找出url。

2 个答案:

答案 0 :(得分:1)

当您使用来自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 :)

答案 1 :(得分:0)

我终于开始工作了。这是我的路线:

欢迎应用程序路线(用于登录/退出的应用程序)

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')),

]

现在,我不会在网址中的下一个变量中出现任何错误:

  

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

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