有了用户模型,我们现在要做的就是搭建博客文章模型
如果不懂如何搭建环境,可以参考以下链接:
Pycharm社区版-创建Flask
Flask博客项目-项目的开始(一)
如果不懂何如进行Flask拓展,可以参考以下连接(此文下方会运用到):
Flask博客项目-Shell拓展Flask_Script(二)
如果不懂何如创建用户模型,可以参考以下连接:
Flask博客项目-数据模型的创建(三)
我们在main.py中添加Post类:
from sqlalchemy import String,Integer,Text,DateTime
from sqlalchemy import ForeignKey
class Post(db.Model):
id = Column(Integer(), primary_key=True)
title = Column(String(255))
text = Column(Text())
publish_date = Column(DateTime())
#这里把user表的id作为外键
user_id = Column(Integer(), ForeignKey('user.id'))
def __init__(self, title):
self.title = title
def __repr__(self):
return "<Post '{}'>".format(self.title)
有了外键,那接下来当然是修改一下User和Post的关系啦
那么就对User和Post类进行处理加工:
from sqlalchemy.orm import relationship
class User(db.Model):
id = Column(Integer(), primary_key=True)
username = Column(String(255))
password = Column(String(255))
#lazy参数和backref是成对出现的
posts = relationship('Post', backref='user', lazy='subquery')
def __init__(self, username):
self.username = username
#方便Shell命令验证
def __repr__(self):
return "<User '{}'>".format(self.username)
backref参数可以使我们通过Post.user属性对User对象进行读取和修改
同时,我们添加了Comment类以及Tag类,使我们提交的文章有了评论和文章标签
from sqlalchemy import Table
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
tags = Table(
'post_tags', Base.metadata,
Column('post_id', Integer(), ForeignKey('post.id')),
Column('tag_id', Integer(), ForeignKey('tag.id'))
)
class Post(db.Model):
id = Column(Integer(), primary_key=True)
title = Column(String(255))
text = Column(Text())
publish_date = Column(DateTime())
comments = relationship('Comment', backref='post', lazy='dynamic')
user_id = Column(Integer(), ForeignKey('user.id'))
tags = relationship('Tag', secondary=tags, backref=backref('posts'))
def __init__(self, title):
self.title = title
def __repr__(self):
return "<Post '{}'>".format(self.title)
class Comment(db.Model):
id = Column(Integer(), primary_key=True)
name = Column(String(255))
text = Column(Text())
date = Column(DateTime())
post_id = Column(Integer(), ForeignKey('post.id'))
def __repr__(self):
return "<Comment '{}'>".format(self.text[:15])
class Tag(db.Model):
id = Column(Integer(), primary_key=True)
title = Column(String(255))
def __init__(self, title):
self.title = title
def __repr__(self):
return "<Tag '{}'>".format(self.title)