重定向到管理员进行登录

时间:2012-06-20 14:55:49

标签: django

我为网址'site / main /'定义了一个视图。我希望能够将(未经身份验证的)用户重定向到默认的“/ admin /”页面进行登录,然后在成功登录后重定向到“/ main /”页面。我按照django文档,但我必须遗漏一些东西,因为我无法让它工作。 我的观点如下:

def main(request):
    if not request.user.is_authenticated():
        return HttpResponseRedirect('admin/?next=%s' % request.path)
    else:

我收到错误:

找不到网页(404)
请求方法:GET
请求网址:http:// sitename:8080 / main / admin /?next = / main /

非常感谢任何帮助!

4 个答案:

答案 0 :(得分:5)

您错过了网址中的初始//admin/?next=...

然而,这仍然无效,因为admin网址对next参数一无所知。这仅适用于实际的登录视图。使用您的代码,用户将登录管理员,但不会被重定向回您的页面。

您应该构建一个登录模板并将其连接到内置的登录视图。然后,您应该只使用is_authenticated装饰器,而不是在视图中检查login_required

@login_required
def main(request):
   ...

答案 1 :(得分:2)

您的request.path不应该是/main/。没有第一个就试试吧。

答案 2 :(得分:1)

  1. urls.py:

                        url('^', include('django.contrib.auth.urls')),
    
  2. 登记/ login HTML:

  3. 
    
      <h3>Login foo</h3>
        <form method="post" action="">
        {% csrf_token %}
        {{form.as_p}}
        <input type="submit" value="Login">
        </form>
    &#13;
    &#13;
    &#13;

    1. views.py

      def only_for_users(request): 如果不是request.user.is_authenticated():     返回HttpResponseRedirect(&#39; / login /?next =%s&#39;%request.path)

      //获取一些非常有趣的数据

      ENV =(django.get_version(),settings.BASE_DIR,内容sys.version) envMod = collections.OrderedDict(排序(sys.modules.items())) return render(request,&#39; env.html&#39;,{&#39; env&#39;:env,&#39; envMod&#39;:envMod})

    2. 适用于Django 1.6并使用内置登录(查看urls.py)和模板。所以你不需要构建一个视图函数。

      urls

      上的信息

答案 3 :(得分:0)

如果要redirect to admin for login进入特定视图,然后在成功登录后再回到redirect back to the view url,则只需做两件事:

  
      
  1. 在您的LOGIN_URL内的settings.py中添加django project module
  2.   
...
LOGIN_URL = '/admin/login/'
  
      
  1. @login_required内的视图函数中添加views.py作为修饰符:
  2.   
from django.contrib.auth.decorators import login_required
...
@login_required
def main(request):
  

设置了LOGIN_URL = '/admin/login/'后,您就可以在整个django项目中的任何@login_required上使用view,并将其will redirect to admin for loginafter successful login will redirect back用于视图URL。

     

现在,您也不需要像 Daniel Roseman 所说的那样在视图内部使用is_authenticated

     

好处是,现在您也不需要来构建登录模板并将其连接到内置登录视图。

此方法的优点还在于您具有灵活性,可以轻松地将这种身份验证添加或删除到所需的任何视图。