因此,我正在使用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] 删除。
我来说两句