2016-09-21 274 views
-3

我对django和web开发人员都非常陌生,所以请耐心等待。在Django项目中使用'onclick'按钮命令更新MySQL

我创建了一个简单的网站,为我的本地橄榄球队提供MySQL后端,并且只需点击一个按钮即可创建一个页面来更新游戏的比分(存储在桌面上)(将当前比分增加+ 1)。 我毫不怀疑这是非常简单的,但在通过类似的帖子进行漫游的周末之后,似乎没有任何东西可以用于我(至少我无法理解)。

我有一个创建包含对需要更新的记录的ID按钮模板:

<a href="{% url livegame_update %}?value={{stat.id}}?updatetype=goals" class="btn btn-success" role="button" onclick="alert({{stat.id}})" id={{stat.id}}>Goal</a> 

这指向此网址:

url(r'^livegame_update', 'steelers_fc.players.views.livegame_update', name='livegame_update'), 

这反过来又执行这个函数的Views;

def livegame_update(request): 
StatID = request.GET.get('value','1') 
StatType = request.GET.get('updatetype','1') 
SQL = "update players_statistics set " + StatType + " = " + StatType + " + 1 where id = " + StatID + ";" 
#stat_edit = statistics.objects.get(id=StatID) 
#stat_edit.goals = stat_edit.goals + 1 
#stat_edit.save() # save object 

cursor = connection.cursor() 
cursor.execute (SQL) 
connection.commit() 
cursor.close() 
connection.close() 

return render_to_response 

最终,SQL上方将结束是: “更新players_statistics设置其中id = 99目标=目标+ 1”

我已经试过几件事情:

  • 执行RAW SQL(按照本示例)
  • 更新Django模型(根据注释掉的部分)
  • 执行外部.py脚本(从Bash Comamnd可以很好地工作)
  • 看着使用'窗体'..但从来没有真正理解。

最终,我觉得问题在于URL和请求和视图之间的参数传递?!?!

任何帮助将不胜感激,一些简单的例子将是惊人的。

感谢

+1

你知道sql注入是什么吗? https://en.wikipedia.org/wiki/SQL_injection – dwilda

+0

是的,绝对。但这真的不重要。只是一个培训课程,同时为一些朋友创建一些半有用的东西:) –

回答

0

嗯......首先,我不明白你为什么要创建光标之类的东西。

我会试着用最简单的方式帮助你。

STEP 1(如果你没有模式)

创建模型

class Match(models.Model): 
    goals = models.IntegerField(default=) 
    # Add as many fields as you need, eg. Teams/Scorer/and other stuff 

    def __str___(self): 
    return self.goals 

第2步 - urls.py /你有,但有些部分缺失

url(r'^livegame_update/(?P<match_id>[\d]+)/$', 'steelers_fc.players.views.livegame_update', name='livegame_update'), 

说明:正如您所看到的,您的网址现在将match_id作为参数传递给您的视图。与[\ d] +部分 - 说,它必须是一个数字,加上意味着无限数量。

第3步 - 您的视图(更新)

def livegame_update(request, match_id): 
    try: 
     match = Match.objects.get(id=match_id) 
    except Match.DoesNotExist(): 
     return render(request, 'your_template.html', {'error': 'match with given id dosnt exist}) 
    match.goals += 1 
    match.save() 

    return render(request, 'your_template.html', {'msg': 'incremented score'}) 

所以干脆这样做是:找到我ID的匹配对象参数中给出(match_id)。如果找不到,返回到您的模板,并传递一个错误的字典。如果它存在增加您的目标字段一个。然后保存你的对象。最后返回到您的模板与按钮和东西。

是否清楚?你需要在上面的代码中解释任何东西吗?

+0

嗨,这很清楚。谢谢你的解释。 我只有一个问题:将'match_id'传递给URL。 我的按钮现在看起来像这样:Goal {{stat.id}}是match_id。 这是否有道理? –

+0

是的,你必须传递给你的对象的ID,你想更新。 – sebb

+0

Hi Sebb。冒着将愚蠢推向一个全新的高度...可以请您帮助我为href所需的html语法......因为我仍然无法更新表格。 目前,我正在创建如下链接:href =“{%url livegame_update%}?match_id = {{stat.id}}”。 谢谢 –