Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.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
Python Django中登录\所需的装饰程序:打开模式,而不是重定向到另一个页面_Python_Django_Twitter Bootstrap 3 - Fatal编程技术网

Python Django中登录\所需的装饰程序:打开模式,而不是重定向到另一个页面

Python Django中登录\所需的装饰程序:打开模式,而不是重定向到另一个页面,python,django,twitter-bootstrap-3,Python,Django,Twitter Bootstrap 3,我有一个django应用程序,它有一些为注册用户保留的部分。我用login_required decorator注释了视图,它将用户重定向到登录页面 但是,我想让用户保持在同一页面上,并打开一个模式对话框,提示用户登录(如网站:)。 为了实现这一点,我想我可以设置一个中间件(而不是使用login_required)并返回如下响应: return HttpResponse("<script>" "showLogin()" "</script>

我有一个django应用程序,它有一些为注册用户保留的部分。我用login_required decorator注释了视图,它将用户重定向到登录页面

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

   return HttpResponse("<script>"
       "showLogin()"
       "</script>")
返回HttpResponse(“”
“showLogin()”
"")
当我尝试这样做时,我意识到这只会呈现一个只有script标签的页面,这显然不起作用

我正在使用引导来显示模态对话框

中间件链接:


有什么想法吗?

相反,它应该是一个实时的ajax调用,并将模式添加到base.html中

Django视图:

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库、路由器等,只需在模板中完成即可

<html>
    ...
    {% if user.is_authenticated %}

    <div class="reserved-section">...</div>

    {% else %}

    <script> modal(); </script>

    {% endif %}
更新

如果需要执行操作,请在模板中使用javascript逻辑

<script>
    function actionOnClick() {
        var logged_in = {% if user.is_authenticated %}true{% else %}false{% end %};
        if(logged_in){
            ..
        }
        ..
    }
</script>

函数actionClick(){
var logged_in={%if user.is_authenticated%}true{%else%}false{%end%};
如果(已登录){
..
}
..
}

我不确定自己是否理解流程。如何调用login\u required\u ajax\u视图方法?您是否建议我在html中的每个锚元素上调用login_required(javascript/jquery方法)?这将在后端调用login\u required\u ajax\u视图,如果登录,则重定向到page else打开登录/注册模式。首先,这是一个1页的应用程序吗?如果是这样,那么这不是正确的方法,如果有什么我推荐WebSocket的话。不管怎么说,流程是这样工作的,您可以设置链接来运行这个需要通过jquery登录的函数,然后在成功运行一个函数时,作为返回数据的一部分验证login_required键,如果False open Moda在进行真正的ajax登录之后,您需要更多的编码,例如将cookie设置为请求,但即使django模板只在页面重新加载时呈现,这实际上取决于您的应用程序的结构,如果您更清楚您想要什么,那么就更容易给出明确的答案我现在了解了流程。这不是一个单页应用程序。这种方法的一个问题是,我必须在前端跟踪登录url和登录重定向url。我想我可以在呈现模板时确定url,并将login_required函数修改为login_required(login_success_url,login_failed_url)。谢谢你的帮助!在我的公司,我们有句话要说:Bloop bloopI我认为这行不通。我需要在用户单击保留链接时打开一个模式,这只能在用户单击链接时确定。当它呈现模板时,上面似乎确定了这一点,类似于Mikeec3的建议,这种方法有几个问题,例如,我必须在前端跟踪受限链接,我必须为每个链接指定一个登录重定向链接(在登录失败的情况下),等等。
<script>
    function actionOnClick() {
        var logged_in = {% if user.is_authenticated %}true{% else %}false{% end %};
        if(logged_in){
            ..
        }
        ..
    }
</script>