您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

使用Flask的wtf表单数据保存的问题

使用Flask的wtf表单数据保存的问题

最近学习使用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 %}


```

mysql 2023/8/17 17:26:47 有324人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶