Django - 如何将javascript变量保存到Django数据库中?

时间:2018-03-26 20:35:27

标签: python django

我有一个名为" 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的值?

2 个答案:

答案 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