【问题标题】:Django: Page Not Found after user session expiredDjango:用户会话过期后找不到页面
【发布时间】:2014-02-27 17:26:34
【问题描述】:

我有一个运行良好的 django 管理站点,大部分情况下。 假设有一个名为 Example 的应用:

我们对此有看法:

@login_required
def example_index():
    something...
    return

网址是:

urlpattern = patterns("", url(r'^(\d+)/index/$', example_index))

在主要的 url 文件中,我们将上面的 urlpattern 包含如下:

urlpatterns = patterns('', url(r'^example/', include(example.urlpattern)))

显然,它们是我文件中的一堆其他东西,但我想我已经为这个问题提供了所有相关代码。

用户登录后,用户可以访问url /hostname/example/1001/index/。它工作得很好。

那么问题是,在某些时候,当用户的会话过期时,如果用户尝试刷新页面,浏览器将返回 404 Page not found(相同的 url:example/1001/index/)。

我的意思是,我希望 django 将用户重定向到登录页面,并将用户重定向回用户再次获取会话后用户所在的任何页面。此行为适用于 django 管理站点的其余部分,但不适用于这个“示例”。

避免这种崩溃的简单方法是删除装饰器:

@login_required

但我不想走那条路。

有谁知道我应该怎么做才能使重新登录和重定向按预期工作?

提前致谢。

【问题讨论】:

    标签: django


    【解决方案1】:

    尝试在装饰器中添加 login_url,以在用户未登录时重定向。

    @login_required(login_url='/login/')
    

    将登录名替换为您的登录网址。

    【讨论】:

    • 其实我自己也想通了。但是,我遇到了一个新问题。现在页面不会再崩溃了,但它也不会重定向回上一页。我认为这可能与设置中的 login_redirect_url 有关。我试图覆盖它,没有运气。该页面将保留在'hostname/login/?next=/example/1001/index/'上。我的意思是既然url中有一个'NEXT'变量,为什么django忽略它?
    • 顺便说一句,如果你能弄明白,mark就是你的了:)
    • 我假设您的意思是 login_url 末尾的斜线?事实上,我认为有那个斜线很奇怪,但是在我删除它之后,它仍然在浏览器 url 中。我的意思是它应该是 'hostname/login?next=/example/1001/index/',但登录后还有一个 '/'。
    • @JerryMeng:你希望 login_url 是什么?
    • 老实说,我不在乎 login_url 是什么。我只想让 django 将我的浏览器重定向回原来的样子。现在,实际上,我的 login_url 是“/admin/”。它会将我链接到管理员登录页面并要求用户提问。这十分完美。但是,尽管我可以看到 url 中有下一个参数,但 django 会在用户登录后跳转到主页“/admin/”。我希望 django 认真对待“下一个”论点并跳转到它链接的任何内容。我在想还有什么我应该做的来触发重定向吗?感谢您的耐心等待!
    猜你喜欢
    • 1970-01-01
    • 2014-06-05
    • 2017-10-28
    • 2013-11-01
    • 2021-10-16
    • 1970-01-01
    • 1970-01-01
    • 2013-12-22
    • 2018-02-04
    相关资源
    最近更新 更多