【问题标题】:UPDATE MySQL with 'onclick' button command in Django Project在 Django 项目中使用“onclick”按钮命令更新 MySQL
【发布时间】:2017-01-29 16:32:23
【问题描述】:

总的来说,我对 django 和 web dev 非常陌生,所以请多多包涵。

我为我的本地足球队创建了一个带有 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:

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

哪个视图依次执行这个函数;

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 最终会变成: "更新 player_statistics 设置目标 = 目标 + 1 其中 id = 99"

我已经尝试了几件事:

  • 执行 RAW SQL(根据此示例)
  • 更新 Django 模型(根据注释掉的部分)
  • 执行了一个外部 .py 脚本(在 Bash Comamnd 中运行良好)
  • 看过使用“表单”..但从未真正理解。

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

任何帮助都将不胜感激,一些简单的例子会很棒。

谢谢

【问题讨论】:

  • 你知道什么是sql注入吗? en.wikipedia.org/wiki/SQL_injection
  • 是的,当然。但这真的不是什么重要的事情。对我来说只是一个培训课程,同时为一些朋友创造了一些半有用的东西:)

标签: javascript python html mysql django


【解决方案1】:

嗯...首先我不明白你为什么要创建游标和东西。

我会尽力以我能想象到的最简单的方式帮助你。

第 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'),

说明:如您所见,您的 url 现在将 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'})

它的作用很简单:为我找到一个带有参数(ma​​tch_id)中给定 id 的 Match 对象。如果没有找到,返回到你的模板,并传递一个带有错误的 dict。如果存在,则将您的 goals 字段加一。然后保存您的对象。最后返回带有按钮和东西的模板。

清楚吗?你需要在上面的代码中解释什么吗?

【讨论】:

  • 嗨,这很清楚。感谢您的精彩解释。我只有一个问题:将“match_id”传递给 URL。我的按钮现在看起来像这样: Goal 其中 {{stat.id}} 是 match_id。这有意义吗??
  • 是的,您必须向您的 url 传递您要更新的对象的 ID。
  • 嗨,Sebb。冒着将愚蠢推向一个全新水平的风险......您能否帮助我使用 href 所需的 html 语法......因为我仍然无法更新表格。目前,我正在创建这样的链接:href="{% url livegame_update %}?match_id={{stat.id}}"。谢谢
  • 一开始只是试着让它像这样工作&lt;a href="/livegame_update/{{stat.id}}/"&gt;GOAL &lt;/a&gt;
猜你喜欢
  • 1970-01-01
  • 2021-06-16
  • 2019-05-20
  • 1970-01-01
  • 2015-08-08
  • 2023-01-09
  • 1970-01-01
  • 2014-01-28
  • 1970-01-01
相关资源
最近更新 更多