Django:如何使用Javascript的window.confirm()注销用户

时间:2019-11-23 10:16:27

标签: javascript python html css django

我正在使用Django / Python创建一个Web应用程序。 Web应用程序顶部有一个导航,如果用户单击“注销”链接,则使用Javascript的window.confirm()询问他们是否确定要注销。 我在#!/usr/bin/env python # -*- coding: latin-1 -*- """ Test play sounds. (June 3, 2015) Piece of SimpleGUICS2Pygame. https://bitbucket.org/OPiMedia/simpleguics2pygame GPLv3 --- Copyright (C) 2015 Olivier Pirson http://www.opimedia.be/ """ import time try: import simplegui SIMPLEGUICS2PYGAME = False except ImportError: import SimpleGUICS2Pygame.simpleguics2pygame as simplegui SIMPLEGUICS2PYGAME = True TEST = 'test sound' sound_jump_ogg = simplegui.load_sound('http://commondatastorage.googleapis.com/codeskulptor-assets/jump.ogg') if SIMPLEGUICS2PYGAME: local_sound_chirp_wav = simplegui._load_local_sound('_snd/chirp_1s.wav') def wait(seconds): """ Wait during `seconds` seconds. :param seconds: (int or float) >= 0 """ assert isinstance(seconds, int) or isinstance(seconds, float), \ type(seconds) start = time.time() while time.time() - start < seconds: pass # Main wait(1) print('Play "jump.ogg"') sound_jump_ogg.play() wait(1) if SIMPLEGUICS2PYGAME: print('Play local "chirp_1s.wav"') local_sound_chirp_wav.play() wait(local_sound_chirp_wav._get_length()) 中有以下内容:

logout.js

如果用户在显示的弹出窗口中选择“确定”,则我希望该应用程序注销该用户并显示该应用程序的主页(以function logout() { if(window.confirm("Are you you sure that you want to log out?")) { window.open("index.html"); } return; } 表示)。但是,要注销用户,我需要在views.py中执行此操作。我在views.py中有以下代码:

index.html

我有一个名为logout.html的页面,该页面具有两个按钮,如果用户单击确认按钮,他们将被注销并转到主页。但是,我希望显示一个弹出窗口。

我的问题是,如何将注销弹出窗口的Javascript代码与处理用户注销的def logoutUser(request): if request.POST: if request.POST.get("confirm-btn"): logout(request) return render(request, 'index.html') if request.POST.get("cancel-btn"): return redirect('/dashboard/') return render(request, 'logout.html') 中的后端代码连接起来。如果用户在views.py中按下“确定”,我该如何实际使用window.confirm()注销用户并显示应用程序的logout(request)?任何见解都会受到赞赏。

1 个答案:

答案 0 :(得分:0)

请原谅我花了一段时间。

我不是一个很好的专家,但是在Django 1.11中,我使用类似的策略将数据和请求从JS / jQuery发送到后端:

JS

function logout(){
  $.ajax({
    url: '/logout/',
    method: "GET",
    data : "logout",
    success: function () {
      console.log("logged out");
      return true
    },
    error: function() {
      console.log("nope, it didn't work");
      return false
    }
  });
}

这暗示您需要在 urls.py 中设置适当的地址:

urlpatterns = [
url(r'^logout/$', views.logout, name='logout'),
...
]

,然后在您的 views.py

def logout(request):
    if "logout" in request.GET:
        ....

如果请求很简单并且不需要特殊保护,我倾向于使用GET,否则使用POST。

如果您想使用POST(可能与现有代码更兼容),则还需要传递CSRF令牌,修改初始JS ,如下所示:

$.ajax({
  url: '/logout/',
  method: "POST",
  data : "logout",
  headers: {'X-CSRFToken': csrftoken},
  ....

在这种情况下,您的JS需要从html获取令牌。您可以通过在 html页面内设置适当的变量来注入令牌。通过注入,django会在渲染页面时填充该值:

<script type="text/javascript">
    var csrftoken = '{{ csrf_token }}';
</script>

希望有帮助。