如何阻止django跳过用户的登录页面?

问题描述:

用户没有机会登录。它只是重定向到404页:如何阻止django跳过用户的登录页面?

获取此404错误:

没有找到

页(404) 请求方法:GET 请求URL:http://127.0.0.1:8000/pk/invalid/

使用namekeepr.urls定义的URL配置, Django按以下顺序尝试了这些URL模式: 当前URL pk/invalid /与这些URL中的任何一个都不匹配。

这是我的views.py文件:

# Login Page 
def login(request): 
    username = request.POST.get('username', '') 
    password = request.POST.get('password', '') 
    user = authenticate(username=username, password=password) 
    if user is not None and user.is_active: 
     # Correct password, and the user is marked "active" 
     auth.login(request, user) 
     # Redirect to a success page. 
     return HttpResponseRedirect("/pk/loggedin/") 
    else: 
     # Show an error page 
     return HttpResponseRedirect("/pk/invalid/") 
+0

错误消息表明'/ pk/invalid /'没有模式。你能向我们展示URLconf吗? – j0ker

+0

是包含在你的主要urlConf中的namekeepr.urls? – MattoTodd

使用login_required()装饰为您的视图功能。

https://docs.djangoproject.com/en/1.3/topics/auth/#django.contrib.auth.decorators.login_required

from django.contrib.auth.decorators import login_required 

@login_required 
def my_view(request): 
    ... 

默认情况下将重定向用户到你的settings.py LOGIN_URL定义。

下面是从用户的角度来看会发生什么,当你使用@login_required装饰一个简单的例子:

  1. 用户键入其浏览器的URL http://localhost:8000/my_view
  2. 此网址的观点有一个@login_required,用户重定向到登录页面:http://localhost:8000/login/?next=/my_view/
  3. 用户再次登录后,他/她自动重定向到/my_view/
+0

我想有一个登录页面的第一页,而不是它是谁尚未登录人们重定向页面。另外,我没有看到默认LOGIN_URL settings.py中定义的地方吗?我创建了一个login.html页面,其中包含一个供用户登录的表单,我希望他们在登录视图时看到该页面。 –

+1

你是什么意思:“我想有一个登录页面作为第一页”?你的意思是你想将url http:// localhost:8000 /映射到登录页面吗? login_required()装饰器将在用户登录后将用户重定向到原始URL。至于LOGIN_URL,您需要手动将其添加到settings.py –