最近学习使用flask编写网站,遇到问题为使用Flask_wtf做一个产品提交的表单,环境是python+flask+wtfrom+MySql,表单里面包含有产品图片,所以在保存到MYsql数据库中遇到问题,网上查了一些资料,都是要不单文字传输,要不就是单文件上传,没有这种既有文字又有图片的,自测也是单文字和单图片都可以解决。本人学习python时间不长,希望大家多多指点。
需要解决的问题的为,1、 从前端传过来的图片为<FileStorage: '1.png' ('image/png')>,文件保存时通过格式处理保存为/uploads/products/1.png,但提交到数据库保存的还是<FileStorage: '1.png' ('image/png')>,如何进行转换也保存为/uploads/products/1.png?
2、如果数据库保存的是<FileStorage: '1.png' ('image/png')>,前台在浏览时如何调用?
from.py
```python
class ProductForm(FlaskForm):
name = wtforms.StringField('产品名称',validators=[Length(min=2,max=30,message='产品名称的字符数量在2-30之间')])
pro_No = wtforms.StringField('产品型号',validators=[Length(min=2,max=30,message='产品型号的字符数量在2-30之间')])
pic = wtforms.FileField('产品图片',validators=[FileRequired(),
FileAllowed(["png","jpg","gif","jpeg"], "仅支持PNG,jpg,gif,jpeg格式图片上传") #**图片**
])
title = wtforms.StringField('简介',validators=[Length(max=30,message='产品简介的字符数量不能大于30')])
body = wtforms.StringField('产品详情',validators=[Length(max=500,message='产品名称的字符数量不能大于500')])
type_id = wtforms.SelectField('产品类型')
```
views.py
```python
def post(self,id=None):
form = ProductForm(request.form)
pro = product() if not id else db.session.query(product).get(id)
if form.validate_on_submit():
pic = form.pic.data
picname = form.pic.data.filename
filepath = os.path.dirname(os.path.abspath(__file__))
savepath = os.path.join(filepath, '/uploads/products')
pic.save(os.path.join(savepath, picname))
form.populate_obj(pro)
if not id:
db.session.add()
db.session.commit()
return redirect(url_for('products.product_create'))
```
html
```python
{% extends 'admin/layout.html' %}
{% block page_head %}
<div class="col-lg-10">
<section class="panel">
<header class="panel-heading">
Basic Forms
</header>
<div class="panel-body">
<form role="form" method='POST' enctype="multipart/form-data">
{{ form.csrf_token }}
<div class="form-group">
{{ form.name.label }}
{{ form.name (class="form-control") }}
</div>
<div class="form-group">
{{ form.pro_No.label }}
{{ form.pro_No (class="form-control") }}
</div>
<div class="form-group">
{{ form.type_id.label }}
{{ form.type_id (class="form-control") }}
</div>
<div class="form-group">
{{ form.pic.label }}
{{ form.pic (class="form-control")}}
</div>
<div class="form-group">
{{ form.title.label }}
{{ form.title (class="form-control") }}
</div>
<div class="form-group">
{{ form.body.label }}
{{ form.body (class="form-control") }}
</div>
<button type="submit" class="btn btn-info">提交</button>
</form>
</div>
</section>
</div>
{% endblock %}
```
使用Flask的wtf表单数据保存的问题
使用Flask的wtf表单数据保存的问题
2023/8/17 17:26:47 有65人围观推荐问题
分类汇总
- (2)
- .net(5)
- Access(210)
- android(1)
- android-studio(1)
- angular(1)
- bash(1)
- c(1)
- c#(625)
- chrome-devtools(1)
- CSS(782)
- css3动画(1)
- docker(1)
- docker-compose(2)
- dotnet(477)
- echarts5.0(1)
- elasticsearch(2)
- element-ui(1)
- eslint(1)
- eventbus(1)
- ffmpeg(2)
- fiddler(1)
- flask(1)
- flutter(1)
- git(2)
- Go(2093)
- golang(9)
- gradle(1)
- harmonyos(4)
- ios(1)
- Java(7682)
- javascript(1221)
- Jave(256)
- JS(330)
- jwt(1)
- kafka(1)
- linux(1)
- lua(1)
- matlab(1)
- mongodb(192)
- MySQL(2516)
- nestjs(1)
- nginx(1)
- Node(262)
- node.js(3)
- Oracle(458)
- php(1213)
- player(1)
- Postgres(167)
- ppt(1)
- python(11274)
- react.js(6)
- redis(2)
- rollup(1)
- seata(1)
- sequelize(1)
- sniffer(1)
- Solr(23)
- springboot(1)
- SQL(118)
- SQLServer(5624)
- Swift(224)
- sybase(21)
- typescript(5)
- uniapp(1)
- uni-app(1)
- vant-weapp(1)
- visual-studio-code(1)
- vue.js(12)
- vue3(3)
- vuex(1)
- wasm(1)
- webpack(1)
- 笔记本电脑(1)
- 调试技巧(1)
- 公众号(1)
- 机器学习(1)
- 计算机(1)
- 爬虫(1)
- 其他(33505)
- 前端(16)
- 算法(2)
- 小程序(3)
- 虚拟机(1)
- 运维(1)