python - Django : open modal instead of redirecting to another page 中的 login_required 装饰器

标签 python django twitter-bootstrap-3

我有一个 Django 应用程序,其中有一些部分是为注册用户保留的。我用 login_required 装饰器注释了 View ,它将用户重定向到登录页面。

但是,我想让用户保持在同一页面上并打开一个提示用户登录的模式对话框(如在网站上:http://www.fashiolista.com/)。 为此,我想我可以设置一个中间件(而不是使用 login_required)并返回如下响应:

   return HttpResponse("<script>"
       "showLogin()"
       "</script>")

当我尝试这样做时,我意识到这会呈现一个仅包含脚本标记的页面,这显然不起作用。

我正在使用 Bootstrap 来显示模态对话框。

中间件链接:http://onecreativeblog.com/post/59051248/django-login-required-middleware

有什么想法吗?

最佳答案

相反,它应该是实时发生的 ajax 调用,并将模态添加到您的 base.html。

Django View :

def login_required_ajax_view(request):
    if request.is_ajax():
        if request.user.is_authenticated():
            return JsonResponse(data={'logged_in', True})
        return JsonResponse(data={'logged_in', False})
    return HttpResponse("not ajax")  # Add something if the call isn't ajax

然后在你的 javascript 中

// Javascript / Jquery
function login_required() {
    $.ajax({
       url: 'url goes here',
       data: data
       success: success  //on success call a function checking logged_in is 
                                   //true or false then open modal to log in.
    })
}

如果它返回 true,则允许他们单击按钮并移至下一页。

旁注:

如果您通过 django 而不是 javascript 路由所有 url,那么如果它们直接转到浏览器中的 url,则模式将不会出现。如果这是一个单页应用程序,那么要使其中的任何一个正常工作,还有很多工作要做。您需要 javascript 库、路由器等,

关于python - Django : open modal instead of redirecting to another page 中的 login_required 装饰器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29523469/

相关文章:

python - Django 导入日期时间

django - 使用 apache2 在 mod_wsgi 上运行 django python 3.4

css - "Horizontal at all times"是什么意思?

python - PyMySQL 如何防止用户遭受 sql 注入(inject)攻击?

python - [0]*x 语法在 Python 中有什么作用?

python - 通过电子邮件发送图像

html - Bootstrap 列未正确中断

python - 如何搜索文件中的值并替换

python - 更改 Pandas 中日期时间列的时区并添加为分层索引

Meteor:无法解码下载的字体和 OTS 解析错误 - 版本标记无效