【发布时间】:2015-03-08 18:56:24
【问题描述】:
我在 django 项目上创建表单。我有一个错误 csrf 失败。
我的 wievs.py 文件:
def durum(request):
if request.method == "POST":
adi = request.POST.get('durum')
db = sql.connect("/usr/connect.db")
im = db.cursor()
db.execute("INSERT INTO durum VALUES ("+str(adi)+")")
db.commit()
asd = "Durum mesajı '"+str(adi)+"' olarak değiştirildi."
return render(request, asd, {})
else:
BASE = os.path.dirname(os.path.abspath(__file__))
return HttpResponse(open(os.path.join(BASE, "html/durum.html")).read())
我的 urls.py 文件:
url(r'^durum/', db.durum),
我的 html 文件:
<form action="/durum" method="post">
{% csrf_token %}
<table>
<tr><th>Durum Mesajı:</th><td><input type="text" name="durum"/></td></tr>
<tr><th></th><td><input type="submit" value="Ekle"/></td></tr>
</table>
【问题讨论】:
-
首先,您应该将 action="/durum" 更改为 action="。"因为您大部分时间都会发布到相同的网址
-
第二个你没有渲染模板,所以 csrf 令牌永远不会被创建。尝试使用 return render()
-
如果你想使用纯 HTML 并直接执行 SQL,我完全不明白你为什么要使用 Django。
-
因为我有 linux 服务器。我不擅长 php 或 asp
-
那不是我的意思。你为什么不实际使用 Django 给你的功能呢?尤其是您现在对 SQL 注入完全开放:如果我将
foo;DROP TABLE durum;--发布到您的表单中,您的所有数据都将被删除。
标签: python django python-2.7 django-forms