通过javascript更新Django数据库

伊娃(Ivaylo Lafchiev)

因此,我正在使用Django构建战舰游戏。我想做的是,一旦游戏结束,就用分数和当前用户在数据库中创建一个新的Game对象。我的游戏模型如下所示:

class Game(models.Model):
user = models.ForeignKey(User)
score = models.IntegerField(default=0)
date = models.DateTimeField(auto_now_add=True)
win = models.BooleanField(default=False)

def save(self, *args, **kwargs):
    if self.score < 0:
        self.score = 0
    super(Game, self).save(*args, **kwargs)

def __unicode__(self):
    return unicode(self.date)

实际的游戏是用JS编写的,您和AI会一直轮流使用,直到其中一位获胜为止,此时将计算出您的得分。这是我想用新游戏更新数据库的地方,但是我不知道该怎么做。我当时想放置一个提交按钮并使该视图在POST请求上创建一个新的游戏对象,但我不知道如何将得分和赢/输变量传递给它。任何帮助,将不胜感激。

布鲁诺菲塔斯

嗯,有很多方法可以实现这一目标,但是我在这里举一个简单的例子

以网址开头:

url(r'^end-game/?','your_app.views.end_game', name='end-game'),

然后在your_app.views

import datetime
from django.http import HttpResponse
from django.contrib.auth.decorators import login_required
from your_app.models import Game

@login_required(redirect_field_name=None, login_url='login')
def end_game(request):

    # Get the post variables
    score = request.POST['score']
    win = request.POST['win']

    # You may want to validate data here

    # Create the game object
    try:
        game = Game.objects.create(
            user = request.user.id,
            score = score,
            win = win,
            date = datetime.datetime.now()
        )
        game.save()

        # Setting output
        response = {
            'status': 1,
            'message': 'Game saved'
        }
     except Exception as e:
         
         # Something went wrong
         response = {
             'status': 0,
             'message': 'Something went wrong - ' +str(e) 
         }

     return HttpResponse(response, mimetype='application/json')

javascript(在html文件中):

 $.post( "{% url 'end-game' %}",
 {
     csrfmiddlewaretoken: '{{ csrf_token}}' ,
     score : score, //pass the score here
     win: win  // pass the win value here
 },
 function(data) {
     if(data.status == 1){
         // success! Do something
     }
     else{
         // error! Do something
     }
 });
 

您也可以使用表格,将其隐藏并在游戏结束时提交。这样做有一些优点,例如在表单本身上具有验证和保存功能,但是由于您只需要两个变量,因此上述操作就可以了。

另外,您应该使用类似

if request.method is POST:

在您执行任何操作之前,请先检查POST值是否已设置,然后再尝试读取它们...

if 'score' in request.POST:

这只是示例,未经测试,但应该可以正常工作

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

无法通过Laravel更新数据库

来自分类Dev

通过链接更新数据库

来自分类Dev

通过 EntityManager 更新数据库

来自分类Dev

通过 PHP 更新数据库

来自分类Dev

数据库中的Django更新对象

来自分类Dev

数据库中的Django更新对象

来自分类Dev

使用 BeautifulSoup 更新 Django 数据库

来自分类Dev

使用javascript变量更新数据库

来自分类Dev

使用javascript更新数据库值

来自分类Dev

使用JavaScript从数据库更新JSON

来自分类Dev

如何通过拖放JavaScript和PHP中的外部事件来更新数据库中的事件?

来自分类Dev

无法通过表单数据更新数据库

来自分类Dev

通过mysql数据库中的php更新数据

来自分类Dev

如何通过模板从Django数据库将xml块传递给javascript?

来自分类Dev

通过软件更新来更改数据库

来自分类Dev

通过python更新Mysql数据库时出错

来自分类Dev

通过Codeigniter和PHP更新SQL数据库

来自分类Dev

通过SQLalchemy更新PosgreSQL数据库;语法错误

来自分类Dev

Ruby on Rails,无法通过Web界面更新数据库

来自分类Dev

通过复选框更改数据库更新

来自分类Dev

尝试通过AJAX和Jquery更新数据库

来自分类Dev

通过模型更新数据库的更快方法

来自分类Dev

无法通过Symfony 1.4更新TeraWurfl数据库

来自分类Dev

通过Cloud Server更新Sqlite数据库

来自分类Dev

SQL Server数据库未通过查询更新

来自分类Dev

通过网站或数据库更新C#代码

来自分类Dev

通过数据库更新共享点列表?

来自分类Dev

通过对WPF Datagrid的编辑来更新数据库

来自分类Dev

通过管理面板更新数据库时调用的方法