一百三十六:CMS系统之发布帖子后台逻辑

 

模型

class PostModel(db.Model):
__tablename__ = 'post'
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
title = db.Column(db.String(200), nullable=False)
content = db.Column(db.Text, nullable=False)
create_time = db.Column(db.DateTime, default=datetime.now)
board_id = db.Column(db.Integer, db.ForeignKey('board.id'))
board = db.relationship('BoardModel', backref='posts')

manager.py中导入模型

映射到数据库

python manager.py db migrate
python manager.py db upgrade

登录验证装饰器

from flask import session, redirect, url_for, g
from functools import wraps
import config


def login_required(func):
""" 登录验证 """

@wraps(func)
def inner(*args, **kwargs):
if config.FRONT_USER_ID in session:
return func(*args, **kwargs)
else:
return redirect(url_for('front.signin'))

return inner

form

class AddPostForm(BaseForm):
title = StringField(validators=[InputRequired(message='请输入标题')])
content = StringField(validators=[InputRequired(message='请输入内容')])
board_id = IntegerField(validators=[InputRequired(message='请输入板块id')])

视图

@bp.route('/apost/', methods=['GET', 'POST'])
@login_required
def apost():
""" 添加帖子 """
form = AddPostForm(request.form)
if request.method == 'POST':
if form.validate():
title = form.title.data
content = form.content.data
board_id = form.board_id.data
board = BoardModel.query.get(board_id)
if not board:
return restful.params_error(message='没有这个板块')
post = PostModel(title=title, content=content)
post.board = board
db.session.add(post)
db.session.commit()
return restful.success()
else:
return restful.params_error(form.get_error())
boards = BoardModel.query.all()
return render_template('front/front_apost.html', boards=boards)

模板

 

posted @ 2019-12-02 20:38  向前走。  阅读(376)  评论(0编辑  收藏  举报