gpt4 book ai didi

python - WTforms 表单未提交但未输出验证错误

转载 作者:太空宇宙 更新时间:2023-11-04 01:32:43 26 4
gpt4 key购买 nike

我正在尝试使用 flask-uploads 进行文件上传,但遇到了一些问题。我将向您展示我的 flask View 函数和 html,希望有人能指出我缺少的内容。

基本上发生的事情是我提交了表单,但在 View 函数中 if request.method == 'POST' and form.validate(): 检查失败。它跳下来显示模板。 wtforms 没有在表单上给我任何错误,所以我想知道为什么它会失败 if 语句。

我在看什么?

设置 flask 上传:

# Flask-Uploads
photos = UploadSet('photos', IMAGES)
configure_uploads(app, (photos))

查看:

def backend_uploadphoto():
from Application import photos
from Application.forms.backend import AddPhotoForm

clients = Client.query.all()
events = Event.query.order_by('date').all()

form = AddPhotoForm(request.form, csrf_enabled=True)

if request.method == 'POST' and form.validate():
from uuid import uuid4

uuid = uuid4()
filename = '{0}.jpg'.format(uuid)

photo = Photo(uid=uuid, client=request.form['client'], event=request.form['event'])

photofile = photos.save(request.files.get('photo'), photo.filename)

return redirect(url_for('backend'))

return render_template('backend/addphoto.html', form=form, clients=clients, events=events)

表格:

class AddPhotoForm(Form):
photo = FileField('Photo')
client = IntegerField('Client:')
event = IntegerField('Event:')

HTML:

<form action="{{url_for('backend_uploadphoto')}}" method="post">
<p>
{{form.client.label}}
<select name="client">
{% for client in clients %}
<option value="{{client.id}}">{{client.fullname}}</option>
{% endfor %}
</select>
{{form.client.errors}}
</p>

<p>
{{form.event.label}}
<select name="event">
{% for event in events %}
<option value="{{event.id}}">{{event.name}}</option>
{% endfor %}
</select>
{{form.event.errors}}
</p>

<p><label for="photo">Photo:</label>{{form.photo}} <input type="submit" value="Upload"> {{form.photo.errors}}</p>
</form>

最佳答案

您有 csrf_enabled=True 但您的表单没有任何 CSRF 保护,因为您没有继承自 SecureForm。如果要启用 CSRF,请阅读 documentation并更新您的表单定义。

如果这是意外,您可以删除 csrf_enabled=True 并且您的逻辑将按预期工作。

要启用 CSRF 保护,有几个步骤:

  1. 继承自 SecureForm
  2. 在表单中创建 generate_csrf_tokenvalidate_csrf_token 方法。这些方法将生成一个唯一的 key 并在未通过验证时引发错误。
  3. {{ form.csrf_token }} 添加到您的模板。

关于python - WTforms 表单未提交但未输出验证错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12701671/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com