django login_required decorator下一个参数没有匹配

时间:2016-02-04 16:30:26

标签: django django-login

TL; DR

对于有装饰者login_required(view Y's url)的视图X我无法重定向到Y,请参考下面的图片

背景

名为ncqs的django应用程序有一个login_view,用于处理用户登录的get和post请求

def login_view(request):
    if request.method=="POST":
        username = request.POST.get('username')
        password = request.POST.get('password')
        print "username:",username,"password",password
        return login_user(request, username, password)
    return render(request, 'ncqs/login.html')

为简单起见,未显示login_user的代码(顺便说一句,它来自另一个stackoverflow答案)

我已经包括

LOGIN_URL = '/ncqs/login'

在我的settings.py文件中

问题

每当我尝试在没有用户登录的情况下访问/ ncqs / start时,我会得到404 enter image description here

解决

通过在urls.py登录后删除尾部斜杠和美元符号,我能够解决此问题

我认为问题在于在网址末尾附加的尾部斜杠... / ncqs / start /导致此问题

我使用的是自定义模板和视图,而不是django auth提供的模板和视图。我也不是在使用django表单,而是使用我自己的自定义表单

请帮帮我

由于

1 个答案:

答案 0 :(得分:3)

由于您的登录网址模式有一个斜杠,例如

url('^login/$, login_view, name='login'),

您需要在LOGIN_URL设置中包含该斜杠。

LOGIN_URL = '/ncqs/login/'

另一种选择是使用网址格式名称,这样可以避免在设置中对网址进行硬编码。

LOGIN_URL = 'login'