Django - 如何将 javascript 变量保存到 Django 数据库中? [复制]
Posted
技术标签:
【中文标题】Django - 如何将 javascript 变量保存到 Django 数据库中? [复制]【英文标题】:Django - How to save javascript variable into Django Database? [duplicate] 【发布时间】:2018-09-05 02:42:52 【问题描述】:我有一个名为“counter”的 javascript 变量,我想用它来更新在 models.py 中实例化的计数器变量。
这是models.py的快照
class Player(BasePlayer):
#track the number of times the user has lost window focus
blur_quantity = models.IntegerField(initial=0)
这是 pages.html 的示例
% block content %
<button name="blur_button" value=counter onclick="Warn()" class="btn btn-primary btn-large">Blur Button</button>
% endblock %
% block scripts %
<script>
var counter = 0;
// Tracks window blurs
$( document ).ready(function()
function onchange (evt)
counter++;
console.log(counter);
window.onblur = onchange;
);
function Warn()
alert(counter);
</script>
% endblock %
现在,每当用户单击按钮时,“计数器”的值都应该存储在某处。如何更新 models.py(例如我的 Django 数据库)中 blur_quantity 的值以反映附加到 blur_button 的值?
【问题讨论】:
与 Ajax 一起,您应该看看如何将 CSRF 与安全性集成; ***.com/questions/6506897/… 【参考方案1】:JavaScript:
var counter = 0;
$( document ).ready(function()
function onchange (evt)
counter++;
$.ajax(
url: '/update_counter/',
data: 'counter': counter,
type: 'POST'
).done(function(response)
console.log(response);
);
window.onblur = onchange;
);
views.py:
from django.http import HttpResponse
from models import Player
def update_counter(request):
if request.method == 'POST':
player = Player.objects.get()
player.blur_quantity = request.POST['counter']
player.save()
message = 'update successful'
return HttpResponse(message)
urls.py:
from django.conf.urls import url
from views import update_counter
urlpatterns = [
url(r'^update_counter/', update_counter)
]
基本上,JavaScript 中的ajax
调用通过POST
请求将counter
发送到服务器。 urls.py
将请求路由到您的 update_counter
方法,该方法使用 counter
的值更新数据库。最后,update_counter
方法返回一个响应,由 JavaScript 中的done
函数处理。
【讨论】:
非常感谢您为此所做的工作。我应该将 urls.py 保存在我的根目录中吗?这是它应该包含的唯一行吗?我正在使用库 otree,它只向我公开views.py 和models.py,所以我从未见过urls.py 没问题 :)urls.py
通常与您的 models.py
和 views.py
位于同一目录中。我已经更新了答案以反映 urls 文件通常的样子。我不确定 otree 会如何影响这一点。我建议查看 Django urls 文档 (docs.djangoproject.com/en/1.8/topics/http/urls) 了解更多信息。请注意,如果您使用的是 Django 2.0,它可能看起来与我的示例有些不同。
你能看看这个吗:- ***.com/questions/66610832/…【参考方案2】:
在onChange
方法中,您可以向服务器的一个端点发送POST
请求,并让服务器从那里更新数据库。然后服务器将使用最新值blur_quantity
作为对POST
请求的响应,并将此值用作您的新counter
。
【讨论】:
我对此知之甚少,很难理解这个答案,抱歉。我目前在本地运行这一切,并且有两个页面 models.py 和 pages.py。发布请求是什么样的? 这可以分解为客户端(一般是 js)和服务器端(你的情况下是 django)。客户端:developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/send 你可以看看这个来学习如何发送一个 POST 请求服务器端:django-rest-framework.org/tutorial/2-requests-and-responses 查找request.method == 'POST'
语句,你可以从request.data
更新你的数据库,并返回一个有效的响应跨度>
谢谢!会尝试一下以上是关于Django - 如何将 javascript 变量保存到 Django 数据库中? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
在 Javascript / jQuery 中无法检索 Django 模板变量值