如何使用SQLAlchemy从数据库中的WTForm中保存markdown?

时间:2017-08-14 18:01:22

标签: flask sqlalchemy markdown wtforms flask-wtforms

我正在制作一个博客,我在“编辑”中创建帖子。在文本区域框中使用markdown进行路由。但是,当我保存帖子时,它会以奇怪的方式转换我的一些格式。例如,当我有一个撇号时,例如单词doesn't,它会这样做:

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)

这是模板:

<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.content( **{':value':'input','@input': 'update'}) }}填充内容的编辑器 然后我使用vue.js创建文本的markdown预览 - 有趣地显示格式正确的东西,直到它打开保存的文件。我相信模板正在将数据错误地传递给服务器。这是因为当我在将数据库中的内容保存到数据库中之前将其打印在服务器代码中时,它的格式不正确。

我该如何正确地做到这一点?

0 个答案:

没有答案