Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
不理解Django管理员登录_Django_Redirect_Django Admin - Fatal编程技术网

不理解Django管理员登录

不理解Django管理员登录,django,redirect,django-admin,Django,Redirect,Django Admin,我试图使用Django中的管理员登录机制,重定向到请求的页面,我得到一个404,因为它试图重定向到发布的url,而不是下一个参数表示的url。我显然不理解一些东西,因为当我逐步查看contrib.auth.login视图时,它根本没有解析下一个参数。例如,我有以下视图(站点主页) 因此,当我输入cb_索引视图的url/sdc/chargeback/时,它会正确地重定向到登录页面,下一个变量设置为/sdc/chargeback/,如下所示 http://localhost:8000/sdc/adm

我试图使用Django中的管理员登录机制,重定向到请求的页面,我得到一个404,因为它试图重定向到发布的url,而不是下一个参数表示的url。我显然不理解一些东西,因为当我逐步查看contrib.auth.login视图时,它根本没有解析下一个参数。例如,我有以下视图(站点主页)

因此,当我输入cb_索引视图的url/sdc/chargeback/时,它会正确地重定向到登录页面,下一个变量设置为/sdc/chargeback/,如下所示

http://localhost:8000/sdc/admin/login/?next=/sdc/chargeback/
不过,contrib.auth.views中的默认登录视图使用完整的url作为重定向参数,而不是下一个参数,因此我总是得到404,而不是重定向到下一个url。我可以通过添加

redirect_to = request.GET.get('next','')
到视图的POST部分,但我认为这应该是内置的功能,它不起作用。更重要的是,由于这是对基础视图的编辑,我必须记住每次更新时都要修复它,这是我不想做的。我不明白什么

编辑: 登录url遵循管理站点url

url(r'^sdc/admin/', include(admin.site.urls)),

登录模板是管理员站点中包含的登录模板,没有任何更改。

django auth应用程序有一个登录视图,您应该直接在url模式中显式包含该视图

(r'^accounts/login/$', 'django.contrib.auth.views.login', name='login'),
有关更多信息,请参阅。您不需要选择
/accounts/login/
作为登录url。我只是想澄清一下,这个视图与管理应用程序是分开的

在您的设置中进行更新,那么当您使用登录所需的装饰器时,就不必使用
login\u url
参数


目前,
/sdc/admin/login/
由管理员应用程序处理,但管理员应用程序确实为此提供了登录视图。如果您仔细阅读代码,您可以看到该方法处理请求。此方法将
REDIRECT\u FIELD\u NAME
(在本例中为“next”)设置为请求路径,然后调用auth login视图。

编辑问题以显示我不理解的信息。当我逐步浏览代码时,我使用的是contrib.auth.views.login视图,这是您链接到的文档中建议的视图。我是否必须编写自定义登录视图,调用auth.login视图,并在自定义视图中处理重定向?这是可行的,但我想确保我了解发生了什么(我的调试器今天无法正常工作:-((.因为我有任何sdc/admin URL,包括login,都由admin app URL处理,admin.sites.login方法处理登录请求。admin.sites.login没有正确处理我重定向到非admin页面的问题,因为它将重定向_字段_名称设置为完整路径,而不是下一个参数指示的路径。通过传递管理员应用程序URL并直接转到auth.login视图,这就消除了问题。正确吗?不管怎样,谢谢。是的,您理解正确。另外需要注意的是,虽然有一个
AdminSite.login
方法,但没有特定的管理员登录URL。如果您没有登录并导航到,例如,
/管理员/
,请注意,您没有被重定向到登录URL。您看到的不是您请求的视图,而是一个登录表单。登录后,您希望被重定向到当前URL。这就是为什么
重定向字段名
被设置为
AdminSite.login
方法中的完整路径。我明白了。我想这是一个缺陷本教程的优点是:它使我们很难理解如何将管理员、身份验证等与非管理员应用程序分开。我感谢您的解释和帮助!
(r'^accounts/login/$', 'django.contrib.auth.views.login', name='login'),