2

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

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

我收到一个错误:

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

任何帮助是极大的赞赏 !

4

4 回答 4

6

/在 URL 中缺少首字母:/admin/?next=...

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

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

@login_required
def main(request):
   ...
于 2012-06-20T15:03:04.640 回答
3

request.path不应该/main/。不用第一个试试。

于 2012-06-20T15:01:27.147 回答
1
  1. 网址.py:

                         url('^', include('django.contrib.auth.urls')),
    
  2. 注册/登录.html:

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

  1. 视图.py

    def only_for_users(request):
       if not request.user.is_authenticated():
           return HttpResponseRedirect('/login/?next=%s' % request.path)
    
       // fetch some really interesting data
    
       env=(django.get_version(),settings.BASE_DIR,sys.version)
       envMod=collections.OrderedDict(sorted(sys.modules.items()))
       return render(request,'env.html',{'env':env, 'envMod':envMod})
    

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

网址信息

于 2015-04-11T15:21:49.883 回答
1

如果你想 redirect to admin for login 查看特定的视图,然后 redirect back to the view url登录成功后你只需要做两件事:

  1. 添加LOGIN_URLsettings.py您的内部 django project module
...
LOGIN_URL = '/admin/login/'
  1. @login_required作为装饰器添加到您的视图函数中views.py
from django.contrib.auth.decorators import login_required
...
@login_required
def main(request):

设置后LOGIN_URL = '/admin/login/',您可以在整个 django 项目@login_required中的任何内容上使用它 以及 查看 url。view will redirect to admin for login after successful login will redirect back

此外,正如Daniel Roseman所说,现在您不再需要is_authenticated在视图内部使用任何内容。

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

这种方法的另一个好处是您可以灵活地轻松地将这种身份验证添加或删除到您想要的任何视图。

于 2019-02-27T12:24:32.957 回答