django CSRF 验证失败。请求中止
django CSRF verification failed. Request aborted
我在 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>
您应该按照 "django-way" 来呈现您的模板。您的视图的工作方式是将模板作为普通 html 发送而不是对其进行处理。
试试这样:
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:
return render('your_template_name.html', context_instance=RequestContext(request))
这样,django 将处理您的模板并呈现正确的 csrf_token。我强烈建议您遵循 djangoproject.com 上的教程并同时使用 ORM
您应该使用 django 模板和 RequestContext。
检查它的非常快速的方法:
在您的应用程序文件夹中创建以下目录结构:
1.templates/myapp_name
使用应用名称,而不是项目名称!
创建文件my_template.html
在您看来添加导入:
从django.shortcuts导入渲染
添加用
替换你的return
return render('myapp_name/my_template.html')
阅读更多关于配置模板目录的信息:
Django template Path
阅读更多关于渲染的内容:
https://docs.djangoproject.com/en/1.7/intro/tutorial03/#a-shortcut-render
注意:
最好使用 django 表单而不是你的方式:
https://docs.djangoproject.com/en/1.7/topics/forms/
和 class 基于视图而不是函数(相信我,它们可能看起来很复杂 - 它们真的很棒:
https://docs.djangoproject.com/en/1.7/topics/class-based-views/
也尽量不要使用硬编码 url,改用 https://docs.djangoproject.com/en/1.7/topics/http/urls/#reverse-resolution-of-urls
它会为您完成所有工作!
我在 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>
您应该按照 "django-way" 来呈现您的模板。您的视图的工作方式是将模板作为普通 html 发送而不是对其进行处理。 试试这样:
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:
return render('your_template_name.html', context_instance=RequestContext(request))
这样,django 将处理您的模板并呈现正确的 csrf_token。我强烈建议您遵循 djangoproject.com 上的教程并同时使用 ORM
您应该使用 django 模板和 RequestContext。 检查它的非常快速的方法: 在您的应用程序文件夹中创建以下目录结构:
1.templates/myapp_name 使用应用名称,而不是项目名称!
创建文件my_template.html
在您看来添加导入:
从django.shortcuts导入渲染
添加用
替换你的returnreturn render('myapp_name/my_template.html')
阅读更多关于配置模板目录的信息: Django template Path
阅读更多关于渲染的内容: https://docs.djangoproject.com/en/1.7/intro/tutorial03/#a-shortcut-render
注意: 最好使用 django 表单而不是你的方式: https://docs.djangoproject.com/en/1.7/topics/forms/ 和 class 基于视图而不是函数(相信我,它们可能看起来很复杂 - 它们真的很棒: https://docs.djangoproject.com/en/1.7/topics/class-based-views/
也尽量不要使用硬编码 url,改用 https://docs.djangoproject.com/en/1.7/topics/http/urls/#reverse-resolution-of-urls 它会为您完成所有工作!