我有一个 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/