gpt4 book ai didi

python - 如何使用 WTForms Quickform 上传图像

转载 作者:行者123 更新时间:2023-12-01 01:56:09 27 4
gpt4 key购买 nike

我在上传其他字段中的图像时遇到问题。虽然其他字段的数据存在,但图像不存在,因此表单不会被验证。

这里是后端,具体看图片文件字段,标有#IMAGE

from flask import Blueprint, request, render_template, redirect, flash
import os
from flask import current_app as app
from src.models.products.product import Product
from flask_wtf import FlaskForm
from wtforms import StringField, BooleanField, FileField, SubmitField
from wtforms.validators import InputRequired
from flask_wtf.file import FileField, FileRequired
from werkzeug.utils import secure_filename


dash_board_blueprint = Blueprint('dashboard', __name__, template_folder='templates')


class UploadForm(FlaskForm):
name = StringField('Name', validators=[InputRequired()])
category = StringField('Category', validators=[InputRequired()])
sub_category = StringField('Sub Category', validators=[InputRequired()])
size = StringField('Size', validators=[InputRequired()])
variant = StringField('Variant', validators=[InputRequired()])
price = StringField('Price', validators=[InputRequired()])
enable_discount = BooleanField('Enable Discount')
discount_price = StringField('Discount Price', validators=[InputRequired()])
in_stock = BooleanField('In Stock')
stock_amount = StringField('Stock Amount')
text = StringField('Text')
display_popular = BooleanField('Display Popular')
image = FileField(validators=[FileRequired()]) # IMAGE
submit = SubmitField("Add Product")

@dash_board_blueprint.route('/')
def dashboard():
return render_template("dashboard/dashboard2.html", form=UploadForm())


@dash_board_blueprint.route('/upload', methods=['GET', 'POST'])
def upload():

form = UploadForm()

filename = form.image
print("File Name:")
print(filename)

任何类型的验证都会失败并且图像不包含任何内容

这是 HTML:

{% extends "dashboard_base.html" %}

{% block content %}

{% macro render_form(form, action) %}
{% from "_formhelpers.html" import render_field %}
<div id="Product" class="variant-block" style="display: block;">
{% from "_formhelpers.html" import render_field %}
{% import "bootstrap/wtf.html" as wtf %}
{{ wtf.quick_form(form, action=action, extra_classes="size-options", button_map={'submit':'light'}) }}
</div>
{% endmacro %}

<div class="container-fluid">
<div class="row" style="background-color: #FAF6EA !important; height: 125px"></div>
</div>
<div class="container-fluid">
<div class="row">

<!-- *** Product Creation *** -->
<div style="background-color: #FAF6EA !important; " class=" container col-sm-4 mt-3 py-3 pl-5">
{{ render_form(form, url_for('dashboard.upload')) }}
</div>

最佳答案

您是否在表单中设置了enctype="multipart/form-data"

Per the Flask-WTF docs :

Remember to set the enctype of the HTML form to multipart/form-data, otherwise request.files will be empty.

<form method="POST" enctype="multipart/form-data">
...
</form>

你的例子让我相信你正在使用 Flask-Bootstrap 扩展。如果是的话,enctype 应该自动设置为 "multipart/form-data" 如果您没有明确设置它,并且 FileField 是存在于您的表单中( per the docs 。但是,我想知道您声明表单的方式是否导致情况并非如此。您可能想尝试在表单中显式设置 enctype声明。

关于python - 如何使用 WTForms Quickform 上传图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50168932/

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