我正在尝试从一个表单上传一个图片到我正在工作的一个实践电子商务网站的Flask数据库中。我使用flask上传来处理文件上传,因为它看起来比其他上传文件的方式容易。我收到以下错误“NameError:name'images'is not defined.”。此错误似乎发生在routes.py处理网站功能和路由的文件。我将列出下面代码的主要部分。中的add_item函数routes.py文件接受表单提交的内容并将数据发送到数据库。正如我所说,这就是错误发生的地方,因为图像无法识别,但我无法找到解决问题的方法。初始py是一个包,用于保存烧瓶上载连接的位置。配置.py用于定义应用程序的配置。中的addItem函数表单.py文件用于布局窗体的结构。因为我认为它没有链接到问题而未包含在本文档中的HTML文件使用了中的表单结构表单.py将窗体显示到屏幕上。在
我尝试过在网上查找解决方案,但是没有非常详细的解决方案,Python Flask的文档已经足够有限,但是Flask Upload没有很好的文档,尤其是在与数据库一起使用时。我是Python烧瓶新手,如果有人能帮我解决这个问题,我将不胜感激。在
routes.py:#addItem page
@app.route('/add_Item',methods=["GET","POST"])
add_Item():
form = addItem()
if form.validate_on_submit():
filename = images.save(request.files['image'])
url = images.url(filename)
item = Item(title=form.name.data,price=form.price.data,description=form.description.data,stock=form.stock.data,vendorid=current_user.id,image=url)
db.session.add(item)
db.session.commit()
flash("Congratulations, your item has been added")
return redirect(url_for('vendor',username=current_user.username))
else:
return render_template('addItem.html', title="Add Item", form=form)
初始py:
^{pr2}$
配置.pyimport os
basedir = os.path.abspath(os.path.dirname(__file__))
TOP_LEVEL_DIR = os.path.abspath(os.curdir)
class Config(object):
SECRET_KEY = os.environ.get('SECRET_KEY') or 'abcdef'
SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL') or \
'sqlite:///' + os.path.join(basedir, 'app.db')
SQLALCHEMY_TRACK_MODIFICATIONS = False
UPLOADS_DEFAULT_DEST = TOP_LEVEL_DIR + '/app/static/img/'
UPLOADS_DEFAULT_URL = 'http://localhost:5000/static/img/'
UPLOADED_IMAGES_DEST = TOP_LEVEL_DIR + '/app/static/img/'
UPLOADED_IMAGES_URL = 'http://localhost:5000/static/img/'
表单.pyclass addItem(FlaskForm):
name = StringField('Name',validators=[DataRequired()])
price = IntegerField('Price',validators=[DataRequired()])
description = StringField('Description',validators=[DataRequired()])
stock = IntegerField('Stock',validators=[DataRequired()])
image = FileField('Image', validators=[FileRequired(), FileAllowed(images, 'Images only!')])
submit = SubmitField('Submit',validators=[DataRequired()])