flask-数据库模型设计2
Posted 花儿爷
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了flask-数据库模型设计2相关的知识,希望对你有一定的参考价值。
3.数据库模型设计
3.1构建蓝图项目目录
1.前后台项目目录分析
2.蓝图构建项目目录
蓝图:一个应用中或跨域应用制作组件和支持通用模式。
蓝图的作用:将不同的功能模块化
构建大型应用
优化项目结构
增强可读性,易于维护
- 定义蓝图(app/admin/__init__.py)
From flask import Blueprint
Admin = Blueprint(“admin”,__name__)
Import views
- 注册蓝图(app/__init__.py)
From admin import admin as admin_blueprint
app.register_blueprint(admin_blueprint,url_prefix=”/admin”)
- 调用蓝图(app/admin/views.py)
from .import admin
@admin.route(“/”)
3.会员及会员登录日志数据模型设计
- 安装数据库连接依赖包
pip install flask-sqlalchemy
- 定义数据库连接
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config["SQLALCHEMY_DATABASE_URI"] = "mysql://root:root@localhost:3306" #换成自己的数据库名字
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = True
db = SQLAlchemy(app)
- 定义会员数据模型
Id:编号、name:账号、pwd:密码、email:邮箱、phone:手机号、info:简介、face:头像
Addtime:注册时间、uuid:唯一标识符、comments:评论外键关联、userlogs:会员登录日志外键关联、moviecols:电影收藏外键关联
class User(db.Model):
__tablename__ = "user"
id = db.Column(db.Integer, primary_key=True) #编号
name = db.Column(db.String(100),unique=True) #昵称
pwd = db.Column(db.String(100)) #密码
email = db.Column(db.String(100),unique=True) #邮箱
phone = db.Column(db.String(11),unique=True) #手机号码
info = db.Column(db.Text) #个性简介
face = db.Column(db.String(255),unique=True) #头像
addtime = db.Column(db.DateTime,index=True,default=datetime.utcnow)
uuid = db.Column(db.String(255),unique=True) #唯一标识符
userlogs = db.relationship(\'Userlog\',backref = \'user\') #会员日志外键关系
会员登录日志:
Id:编号、
user_id:所属会员编号、
ip:最近登录ip地址、
addtime:最近登录时间
定义标签:
Id:编号、Name:标题、Movies:电影外键关联、Addtime:添加时间
电影:
Id:编号、title:电影标题、url:电影地址、info:电影简介、logo:电影封面、star:星级、
playnum:电影播放量、commentnum:电影评论量、tag_id:所属标签、area:地区、
release_time:发布时间、length:电影长度、addtime:添加时间、comments:电影评论外键关联、moviecols:电影收藏外键关联、
上映预告:
Id:编号、Name:上映预告标题、Logo:上映预告封面、Addtime:添加时间
评论:
Id:编号、Content:评论内容、Movie_id:所属电影、User_id:所属用户、Addtime:最近登录时间
收藏电影:
Id:编号、Movie_id:所属电影、User_id:所属用户、Addtime:最近登录时间
权限:
Id:编号、Name:编号、URL :地址、addtime:创建时间
角色:
Id:编号、Name:名称、Auths:权限列表、Addtime:创建时间
管理员:
Id:编号、name:管理员名称、pwd:管理员密码、is_super:是否超级管理员、role_id:角色编号、addtime:创建时间、adminlogs:管理员登录日志外键关联、oplogs:操作日志外键关联。
管理员登录日志:
Id:编号、admin_id:所属管理员编号、ip:最近登录地址、addtime:添加时间
操作日志:
Id:编号、admin_id:所属管理员编号、ip:啊哦做地址、reason:操作原因、addtime:添加时间
models.py
#coding:utf-8 from flask import Flask from flask_sqlalchemy import SQLAlchemy from _datetime import datetime import pymysql #定义数据库连接 app = Flask(__name__) #创建实例化app对象 app.config["SQLALCHEMY_DATABASE_URI"] = "mysql+pymysql://root:root@localhost:3306/movie" app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = True #配置,如果设置True,将会追踪对象修改并且发送信号 db = SQLAlchemy(app) #定义db,传入app对象 #定义会员数据模型 class User(db.Model): __tablename__ = "user" #存入表名称 #column字段 unique唯一 id = db.Column(db.Integer, primary_key=True) #编号 name = db.Column(db.String(100),unique=True) #昵称 pwd = db.Column(db.String(100)) #密码 email = db.Column(db.String(100),unique=True) #邮箱 phone = db.Column(db.String(11),unique=True) #手机号码 info = db.Column(db.Text) #个性简介 face = db.Column(db.String(255),unique=True) #头像 addtime = db.Column(db.DateTime,index=True,default=datetime.utcnow) uuid = db.Column(db.String(255),unique=True) #唯一标识符 userlogs = db.relationship(\'Userlog\',backref=\'user\') #会员日志外键关系 comments = db.relationship(\'Comment\',backref=\'user\') #评论外键关系 moviecols = db.relationship(\'Moviecol\',backref=\'user\') #收藏外键关系 #定义一个方法,返回的类型 def __repr__(self): return "<User %r>" % self.name #会员登录日志 class Userlog(db.Model): __tablename__ = "userlog" #定义表名 id = db.Column(db.Integer,primary_key=True) #编号 #定义外键 db.ForeignKey user_id = db.Column(db.Integer,db.ForeignKey(\'user.id\')) #所属会员 ip = db.Column(db.String(100)) #登录IP addtime = db.Column(db.DateTime,index=True,default=datetime.utcnow) #登录时间 ,默认时间 def __repr__(self): return "<Userlog %r>" % self.id #定义标签 class Tag(db.Model): __tablename__ = "tag" #定义表名称 id = db.Column(db.Integer,primary_key=True) #编号 name = db.Column(db.String(100),unique=True) #名称 addtime = db.Column(db.DateTime,index=True,default=datetime.utcnow) #添加时间 movies = db.relationship("Movie",backref=\'tag\') #电影外键关系关联 #返回类型 def __repr__(self): return "<Tag %r>" %self.name #电影 class Movie(db.Model): __tablename__ = "movie" #定义表名称 id = db.Column(db.Integer,primary_key=True) #编号 title = db.Column(db.String(255),unique=True) #标题 url = db.Column(db.String(255),unique=True) #地址 info = db.Column(db.Text) #简介 logo = db.Column(db.String(255),unique=True) #封面 star = db.Column(db.SmallInteger) #星级 小整形 playnum = db.Column(db.BigInteger) #播放量 commentnum = db.Column(db.BigInteger) #评论量 tag_id = db.Column(db.Integer,db.ForeignKey(\'tag.id\')) #所属标签 area = db.Column(db.String(255)) #上映地区 release_time = db.Column(db.Date) #上映时间 length = db.Column(db.String(100)) #播放时间 addtime = db.Column(db.DateTime,index=True, default=datetime.utcnow) #添加时间 comments = db.relationship("Comment",backref=\'movie\') #评论外键关系关联 moviecols = db.relationship("Moviecol",backref=\'movie\') #收藏外键关系关联 def __repr__(self): return "<Movie %r>" %self.title #上映预告 class Preview(db.Model): __tablename__ = "preview" #定义表名 id = db.Column(db.Integer,primary_key=True) #编号 title = db.Column(db.String(255),unique=True) #标题 logo = db.Column(db.String(255),unique=True) #封面 addtime = db.Column(db.DateTime,index=True,default=datetime.utcnow) #添加时间 def __repr__(self): return "<Preview %r>" %self.title #评论 class Comment(db.Model): __tablename__ = "comment" #定义表名 id = db.Column(db.Integer,primary_key=True) #编号 content = db.Column(db.Text) #内容 movie_id = db.Column(db.Integer,db.ForeignKey(\'movie.id\')) #所属电影 user_id = db.Column(db.Integer,db.ForeignKey(\'user.id\')) #所属用户 addtime = db.Column(db.DateTime,index=True,default=datetime.utcnow) #添加时间 def __repr__(self): return "<Comment %r>" %self.id #电影收藏 class Moviecol(db.Model): __tablename__ = "moviecol" #定义表名 id = db.Column(db.Integer,primary_key=True) #编号 movie_id = db.Column(db.Integer,db.ForeignKey(\'movie.id\')) #所属电影 user_id = db.Column(db.Integer,db.ForeignKey(\'user.id\')) #所属用户 addtime = db.Column(db.DateTime,index=True,default=datetime.utcnow) #添加时间 def __repr__(self): return "<Moviecol %r>" % self.id #权限 class Auth(db.Model): __tablename__ = "auth" #定义表名 id = db.Column(db.Integer,primary_key=True) #编号 name = db.Column(db.String(100),unique=True) #名称 url = db.Column(db.String(255),unique=True) #地址 addtime = db.Column(db.DateTime,index=True,default=datetime.utcnow) #添加时间 def __repr__(self): return "<Auth %r>" % self.name #角色 class Role(db.Model): __tablename__ = "role" #定义表名 id = db.Column(db.Integer,primary_key=True) #编号 name = db.Column(db.String(100),unique=True) #名称 auths = db.Column(db.String(600)) addtime = db.Column(db.DateTime,index=True,default=datetime.utcnow) #添加时间 def __repr__(self): return "<Role %r>" % self.name #管理员 class Admin(db.Model): __tablename__ = "admin" #存入表名称 id = db.Column(db.Integer, primary_key=True) #编号 name = db.Column(db.String(100),unique=True) #管理员账号 pwd = db.Column(db.String(100)) #管理员密码 is_super = db.Column(db.SmallInteger) #是否为超级管理员,0为超级管理员 role_id = db.Column(db.Integer,db.ForeignKey(\'role.id\')) #所属角色 addtime = db.Column(db.DateTime,index=True,default=datetime.utcnow) #添加时间 adminlogs = db.relationship("Adminlog",backref=\'admin\') #管理员登录日志外键关系关联 oplogs = db.relationship("Oplog",backref=\'admin\') #管理员操作日志外键关系关联 def __repr__(self): return "<Role %r>" % self.name #管理员登录日志 class Adminlog(db.Model): __tablename__ = "adminlog" #定义表名 id = db.Column(db.Integer,primary_key=True) #编号 #定义外键 db.ForeignKey admin_id = db.Column(db.Integer,db.ForeignKey(\'admin.id\')) #所属管理员 ip = db.Column(db.String(100)) #登录IP addtime = db.Column(db.DateTime,index=True,default=datetime.utcnow) #登录时间 ,默认时间 def __repr__(self): return "<Adminlog %r>" % self.id #操作日志 class Oplog(db.Model): __tablename__ = "oplog" #定义表名 id = db.Column(db.Integer,primary_key=True) #编号 #定义外键 db.ForeignKey admin_id = db.Column(db.Integer,db.ForeignKey(\'admin.id\')) #所属管理员 ip = db.Column(db.String(100)) #登录IP reason = db.Column(db.String(600)) #操作原因 addtime = db.Column(db.DateTime,index=True,default=datetime.utcnow) #登录时间 ,默认时间 def __repr__(self): return "<Oplog %r>" % self.id if __name__ == "__main__": #db.create_all() \'\'\'role = Role( name="超级管理员", auths=" " ) db.session.add(role) db.session.commit()\'\'\' from werkzeug.security import generate_password_hash #导入一个生成密码的工具 admin = Admin( name="flower", pwd=generate_password_hash("123456"), is_super=0, role_id=1 ) #调用admin db.session.add(admin) db.session.commit()
以上是关于flask-数据库模型设计2的主要内容,如果未能解决你的问题,请参考以下文章
Flask 学习-70.Flask-RESTX 注册接口实例
深入理解Flask(2.使用 SQLAlchemy 创建数据模型)