我正在使用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)
?任何见解都会受到赞赏。
答案 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>
希望有帮助。