我有一个名为" 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 %}
现在,每当用户点击按钮时,&#34;计数器&#34;应该存放在某个地方。如何在models.py(例如我的Django数据库)中更新blur_quantity的值以反映附加到blur_button的值?
答案 0 :(得分:2)
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
调用会通过counter
请求将POST
发送到服务器。 urls.py
将请求路由到您的update_counter
方法,该方法使用counter
的值更新数据库。最后,update_counter
方法返回一个响应,该响应由JavaScript中的done
函数处理。
答案 1 :(得分:1)
在onChange
方法中,您可以向服务器的某个端点发送POST
请求,并让服务器从那里更新数据库。然后,服务器应作为对POST
请求的响应进行回复,并使用最新值blur_quantity
,并将此值用作新counter
。