gpt4 book ai didi

javascript - View 和JS之间传递变量; Django

转载 作者:行者123 更新时间:2023-12-02 22:27:09 25 4
gpt4 key购买 nike

我首先通过 POST 请求将 JS 变量“已确认”传递到我的 Django View 。然后我运行一个 python 脚本,它接受这个变量并进行一些处理。最后我想将它传递回我的 html/JS,以便我可以显示处理后的数据。

我目前正在尝试使用 Django session 来实现我的目标,但存在“1 个 session 延迟”,因此我更新的 session 变量将作为前一个 session 的值返回。

是否有更好的方法可以将变量从我的 View 传递到 JS/修复我当前的解决方案?

查看:

def crossword(request):
if request.method == 'POST':
Session.objects.all().delete()

str_squares = (request.body).decode('utf-8')
squares = [int(i) for i in str_squares.split(',')]

letters = puzzle_solver.solve_puzzle(3, squares)
# print(letters)
for each_square in letters.keys():
request.session[each_square] = letters[each_square]

request.session.modified = True

return render(request, 'crossword.html')

JS:

            // Output a list of active squares
var xhr = new XMLHttpRequest();

var generate = { Generate:function(){
var confirmed = [];
for (i=0; i<active_boxes.length; i++){
confirmed.push(active_boxes[ i ].id_num);
}
console.log(confirmed);

xhr.open("POST", "http://localhost:8000/", true);
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.send(c=confirmed);

console.log("{{ request.session.keys }}")
console.log("{{ request.session.values }}")
var tester = parse_session_keys("{{ request.session.keys }}");

console.log(tester);
solve_crossword(tester);
}};

最佳答案

您不直接将响应发送回 JS 有什么原因吗?在您的 views.py 中,您可以执行以下操作

from django.http import JsonResponse

def crossword(request):
if request.method == 'POST':
str_squares = (request.body).decode('utf-8')
squares = [int(i) for i in str_squares.split(',')]
letters = puzzle_solver.solve_puzzle(3, squares)

return JsonResponse(letters)

return render(request, 'crossword.html')

发送请求后,等待并直接读取 JSON 格式的响应,然后在 JS 代码中使用它,如 in this post 所述。 .

如果有任何原因阻止您执行此操作(例如,可能有一个表单也向同一页面发出 POST 请求,因此您最终需要渲染填字游戏模板),请为您的 api 分配另一个 url,例如 /api/填字游戏

您最初使用 session 的想法不应在此用例中使用,尤其是对于 Session.objects.all().delete() 行(请勿在未检查的情况下删除所有 session 数据) )。

关于javascript - View 和JS之间传递变量; Django ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59024860/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com