helloflask / flask-ckeditor

CKEditor integration for Flask, including image upload, code syntax highlight, and more.
https://flask-ckeditor.readthedocs.io
MIT License
200 stars 67 forks source link

how to save the edited content? #6

Closed highwindmx closed 6 years ago

highwindmx commented 6 years ago

Great work Do you have a demo about how to save/upload the edited content

greyli commented 6 years ago

It depends on the tool you use. For example, if you use Flask-WTF and Flask-SQLAlchemy, then the save/upload operation will just like any normal form input:

import os

from flask import Flask, render_template
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
from wtforms.validators import DataRequired
from flask_sqlalchemy import SQLAlchemy
from flask_ckeditor import CKEditor, CKEditorField

app = Flask(__name__)

app.secret_key = 'secret string'

ckeditor = CKEditor(app)
db = SQLAlchemy(app)

class Post(db.Model):  # database model class
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(64))
    body = db.Column(db.Text)

class PostForm(FlaskForm):  # form class
    title = StringField('Title')
    body = CKEditorField('Body', validators=[DataRequired()])
    submit = SubmitField('Submit')

@app.route('/write', methods=['GET', 'POST'])
def write():
    form = PostForm()
    if form.validate_on_submit():  # create new post
        title = form.title.data
    body = form.body.data
        post = Post(title=title, body=body)  # create record instance
        db.session.add(post)  # add to database session
        db.session.commit()  # commit change into database      
    return render_template('post.html', title=title, body=body)
    return render_template('write.html', form=form)

@app.route('/edit/<int:post_id>', methods=['GET', 'POST'])
def edit(post_id):
    post = Post.query.get_or_404(post_id)  # query post in database
    form = PostForm()
    if form.validate_on_submit():  # edit/update created post
        post.title = form.title.data  # set new value
    post.body = form.body.data  # set new value
        db.session.commit()  # commit change into database      
    return render_template('post.html', title=title, body=body)
    form.body.data = post.body  # preset the form input data
    return render_template('edit.html', form=form)

You can check Flask-SQLAlchemy's documentation for more infomation.