Flask实现的功能:
- post模型的建立
- post表单的建立
post模型的建立:
from app.extensions import db
from datetime import datetime
class Posts(db.Model):
__tablename__ = 'posts'
id = db.Column(db.Integer, primary_key=True)
rid = db.Column(db.Integer, default=0)
content = db.Column(db.Text)
timestamp = db.Column(db.DateTime, default=datetime.utcnow)
# 添加外键关联,'表名.字段'
uid = db.Column(db.Integer, db.ForeignKey('users.id'))
__init__.py:
添加关联表collections
from app.extensions import db
from .user import User
from .posts import Posts
# 用户收藏帖子的中间关联表,不需手动维护
collections = db.Table('collections',
db.Column('user_id', db.Integer, db.ForeignKey('users.id')),
db.Column('posts_id', db.Integer, db.ForeignKey('posts.id'))
)
post表单的建立:
from flask_wtf import FlaskForm
from wtforms import TextAreaField, SubmitField
from wtforms.validators import Length
# 发表博客表单
class PostsForm(FlaskForm):
# render_kw:渲染的字段的属性字典
content = TextAreaField('', render_kw={'placeholder': '这一刻的想法...'}, validators=[Length(3, 140, message='只能在3~140个字符之间')])
submit = SubmitField('发表')
__init__.py:
from .user import RegisterForm, LoginForm, IconForm
from .posts import PostsForm
user模型的更新:
class User(UserMixin, db.Model):
....
posts = db.relationship('Posts',backref='user', lazy='dynamic')
数据库迁移,更新:
python manage.py db migrate
python manage.py db upgrade
main视图函数的更新:
from flask import Blueprint,render_template,redirect,url_for,flash
from app.forms import PostsForm
from flask_login import current_user
from app.models import Posts
from app.extensions import db
main = Blueprint('main', __name__)
@main.route('/', methods=['GET', 'POST'])
def index():
form = PostsForm()
if form.validate_on_submit():
if current_user.is_authenticated:
u = current_user._get_current_object()
p = Posts(content=form.content.data,user=u)
db.session.add(p)
flash('post success')
return redirect(url_for('main.index'))
else:
flash('please login')
return redirect(url_for('user.login'))
posts = Posts.query.filter_by(rid=0).order_by(Posts.timestamp.desc())
return render_template('main/index.html',form=form,posts=posts)
main/index.html更新:
{% extends 'common/base.html' %}
{% block title %}首页{% endblock %}
{% block page_content %}
{% if current_user.is_authenticated %}
<h1>hello! {{current_user.username}}</h1>
{{ quick_form(form) }}
{% endif %}
{% for p in posts %}
<div class="media">
<div class="media-left">
<a href="#">
<img class="media-object" src="{{ url_for('static', filename='upload/'+p.user.icon) }}" alt="icon">
</a>
</div>
<div class="media-body">
<div style="float: right">发表于:{{ moment(p.timestamp).fromNow() }}</div>
<h4 class="media-heading">{{ p.user.username }}</h4>
{{ p.content }}
{% endfor %}
{% endblock %}
本文介绍了如何使用Flask框架来实现帖子的建模,包括post模型的创建、关联表collections的添加、post表单的设计以及数据库迁移和视图函数的更新。
627

被折叠的 条评论
为什么被折叠?



