【问题标题】:Django authentication without reloading page无需重新加载页面的 Django 身份验证
【发布时间】:2014-01-16 06:23:16
【问题描述】:

我对前端 Web 编程比较陌生,并且正在尝试模仿 iCloud.com 登录页面。我有整个布局。我有成功登录时的转换功能以及登录失败时的抖动功能,但我一生无法弄清楚如何在不更改页面的情况下使用 django 检查用户身份验证,然后相应地激活这些功能。我无法让 ajax 或任何东西工作。

任何人都知道这是如何完成的,可以为我指明正确的方向。现在我很确定我要做的是提交一个 ajax 表单。

【问题讨论】:

  • “使用 django 检查用户身份验证”是什么意思。 request.user.is_authenticated 返回用户是否登录
  • 是的,我可以通过一般的 django 方式来做到这一点,它调用一个新的 url 来做这些事情.. 但是我如何将表单提交给执行 is_authenticated 的 django/python 函数,然后制作在不离开页面或刷新的情况下根据结果做出决定?
  • 我会发布最简单的例子。
  • icloud 是一个单页网络应用程序。它与普通网页非常不同。我们需要编写很多前端代码和后端api。在大多数情况下,这是不值得的。

标签: python ajax django json django-authentication


【解决方案1】:

用户认证没什么特别的。它对 ajax 和非 ajax 视图的工作方式相同。

我建议你先实现不使用 ajax 的身份验证。确认它正在工作,然后使用 ajax。

但简单的例子是:

1) 将登录网址添加到 urls

from django.contrib.auth import views as auth_views
....
url(r'^authenticate/$',
        auth_views.login,
        {'template_name': 'yourapp/login.html'},
        name='auth_login'),

如您所见,您可以将模板作为关键字参数提供给该视图。因此,您可以使用 djangos 自己的身份验证视图对您的模板进行身份验证

2) 添加链接到您的页面,点击后。获取请求并读取模板并将其放入某种模式中。这相对容易,很多 jQuery modal 插件都支持这个特性。我已经多年没有使用 jQuery 了,所以找到可靠的例子对你来说可能和我一样容易

3) 模态窗口将显示您自己的 login.html。在该文件中,您将表单发布到它来自的相同 url。您可以通过将表单操作属性设置为 {{ request.get_full_path }}

4) 您还必须实现一些 js 代码,这些代码将在提交时重置表单以显示登录错误。

5) 提交成功后可能是最困难的部分,因为您必须在这里进行大部分编码。使用 django 视图登录后,如果不使用 ajax,则会被重定向。您可以通过两种方式处理它 - 期待它并使用返回的重定向作为提示,您可以显示“登录成功”消息或向您的服务器发出另一个 ajax 请求以获取“登录成功”模板并刷新您的站点区域需要显示登录(登录或未登录)状态。

【讨论】:

    猜你喜欢
    • 2018-02-17
    • 1970-01-01
    • 1970-01-01
    • 2016-08-13
    • 2019-08-02
    • 2019-01-01
    • 1970-01-01
    • 2020-06-26
    • 2014-10-30
    相关资源
    最近更新 更多