Flask 如何使用SQLAlchemy将WTForm中的降价保存到数据库中?

Flask 如何使用SQLAlchemy将WTForm中的降价保存到数据库中?,flask,sqlalchemy,markdown,wtforms,flask-wtforms,Flask,Sqlalchemy,Markdown,Wtforms,Flask Wtforms,我有一个博客,我在其中创建的'编辑'路线使用文本框中的标记文章。然而,当我保存帖子时,它会以奇怪的方式转换我的一些格式。例如,当我有一个撇号时,例如在单词中不它会这样做: doesn't 以下是表格代码: class Item(db.Model): __tablename__= 'item' id = db.Column(db.Integer,primary_key=True) title = db.Column(db.String(80

我有一个博客,我在其中创建的'编辑'路线使用文本框中的标记文章。然而,当我保存帖子时,它会以奇怪的方式转换我的一些格式。例如,当我有一个撇号时,例如在单词
中不
它会这样做:

doesn't
以下是表格代码:

class Item(db.Model):
    __tablename__= 'item'
    id = db.Column(db.Integer,primary_key=True)
    title = db.Column(db.String(80),unique=False)
    content = db.Column(db.String(80),unique=False)
    x = db.Column(db.Float)
    y = db.Column(db.Float)
    category_id = db.Column(db.Integer, db.ForeignKey('category.id'))
    order = db.Column(db.Integer)

    def __init__(self,title,content,x,y,category_id,order):
        self.title = title
        self.content = content
        self.x = x
        self.y = y
        self.category_id = category_id
        self.order = order
以下是我的编辑路线,用于在sqlalchemy中保存对象:

@app.route('/edit/<itemid>',methods=('GET','POST'))
@requires_auth
def edit(itemid):
    item = Item.query.get(itemid)
    c = Category.query.get(item.category_id)
    form = ItemForm()
    form.title.data=item.title
    category = c.name
    form.content.data=item.content
    if request.method == 'POST':
        if request.form.get('title'):
            item.title = request.form['title']
            item.content = request.form['content']
            print item.content, 'conetnt'
            db.session.add(item)
            db.session.commit()
            return redirect(url_for('view',itemid=item.id))
        else:
            flash('Title and Content and Category are required.','danger')
    return render_template('edit.html',item=item,form=form, category=category)
@app.route('/edit/',方法=('GET','POST'))
@需要授权
def编辑(项目ID):
item=item.query.get(itemid)
c=Category.query.get(item.Category\u id)
form=ItemForm()
form.title.data=item.title
类别=c.name
form.content.data=item.content
如果request.method==“POST”:
if request.form.get('title'):
item.title=request.form['title']
item.content=request.form['content']
打印item.content“conetnt”
db.session.add(项)
db.session.commit()
返回重定向(url_for('view',itemid=item.id))
其他:
flash(‘需要标题、内容和类别’,‘危险’)
返回呈现模板('edit.html',item=item,form=form,category=category)
以下是模板:

<div id="container" style="padding:10px">
        <form method="POST" action="{{ url_for('edit',itemid=item.id) }}" id="text-input">
            {{ form.csrf_token }}
            <div style="margin-left:30px;margin-top:20px;">
                Title: {{ form.title }} {{ category }}
            </div>
            <br>

            <div id="editor">
            {{ form.content( **{':value':'input','@input': 'update'}) }}
                <div id="preview" v-html="compiledMarkdown"></div>
            </div>
            <br>
            <input type="submit" value="Save" class="btn btn-secondary" >
        </form>
</div>

{{form.csrf_token}
标题:{form.Title}}{category}

{{form.content(**{:value':'input','@input':'update'}}
正如您所看到的,我有一个编辑器,它使用{{
form.content(**{:value':'input','@input':'update'}}}
然后,我使用vue.js创建文本的标记预览-有趣的是,在打开保存的文件之前,它会显示格式正确的内容。我认为模板将数据错误地传递给服务器。这是因为当我在将内容保存到数据库之前打印服务器代码中的内容时,格式不正确


如何正确地执行此操作

您的内容似乎多次被转义。
中的撇号首先转换为其数字字符引用:
和#39。然后,第二轮转义将
&
转换为其HTML实体:
&。最后,第三轮转义将第二个
&
转换为其HTML实体:
&。总之,您将得到:
=>';=>&#39; => &;amp#39;。虽然第一轮是完全可以接受的,但你需要确定第二轮和第三轮发生在哪里,并避免这些。嗯,我不知道如何防止这些人逃跑。基本上是这样的,对吗?它是将内容传递到服务器的程序,当您第一次保存内容时,
print item.content
中打印的内容是什么?如果您看到
'
,尝试使用
item.content=Markup.escape(request.form['content'])转义文本。
@OluwafemiSule似乎无法修复它。事实上,如果我打印Markup.escape(request.form['content']),它会打印don';但是如果我只打印request.form['content'],我就得到了正确的,不知道您正在运行哪个版本的python、flask、vuejs?