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

Par*_*gue 2 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) 
Run Code Online (Sandbox Code Playgroud)

这是 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 %}
Run Code Online (Sandbox Code Playgroud)

现在,每当用户单击按钮时,“计数器”的值都应该存储在某处。如何更新models.py(例如我的Django 数据库)中的blur_quantity 值以反映附加到blur_button 的值?

mc_*_*ser 5

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;

   }); 
Run Code Online (Sandbox Code Playgroud)

视图.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)
Run Code Online (Sandbox Code Playgroud)

网址.py:

from django.conf.urls import url

from views import update_counter

urlpatterns = [
   url(r'^update_counter/', update_counter)
]
Run Code Online (Sandbox Code Playgroud)

基本上,ajaxJavaScript 中的in 调用counter通过POST请求发送到服务器。urls.py将请求路由到您的update_counter方法,该方法使用值更新数据库counter。最后,该update_counter方法返回一个响应,该响应由doneJavaScript 中的函数处理。