3.数据库模型设计

3.1构建蓝图项目目录

1.前后台项目目录分析

 

2.蓝图构建项目目录

蓝图:一个应用中或跨域应用制作组件和支持通用模式。

蓝图的作用:将不同的功能模块化

构建大型应用

优化项目结构

增强可读性,易于维护

  1. 定义蓝图(app/admin/__init__.py)

From flask import Blueprint

Admin = Blueprint(“admin”,__name__)

Import views

  1. 注册蓝图(app/__init__.py)

From admin import admin as admin_blueprint

app.register_blueprint(admin_blueprint,url_prefix=”/admin”)

  1. 调用蓝图(app/admin/views.py)

from .import admin

@admin.route(“/”)

3.会员及会员登录日志数据模型设计

  1. 安装数据库连接依赖包

pip install flask-sqlalchemy

  1. 定义数据库连接

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)

  1. 定义会员数据模型

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

  1. #coding:utf-8
  2. from flask import Flask
  3. from flask_sqlalchemy import SQLAlchemy
  4. from _datetime import datetime
  5. import pymysql
  6. #定义数据库连接
  7. app = Flask(__name__) #创建实例化app对象
  8. app.config["SQLALCHEMY_DATABASE_URI"] = "mysql+pymysql://root:root@localhost:3306/movie"
  9. app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = True #配置,如果设置True,将会追踪对象修改并且发送信号
  10. db = SQLAlchemy(app) #定义db,传入app对象
  11.  
  12. #定义会员数据模型
  13. class User(db.Model):
  14. __tablename__ = "user" #存入表名称
  15. #column字段 unique唯一
  16. id = db.Column(db.Integer, primary_key=True) #编号
  17. name = db.Column(db.String(100),unique=True) #昵称
  18. pwd = db.Column(db.String(100)) #密码
  19. email = db.Column(db.String(100),unique=True) #邮箱
  20. phone = db.Column(db.String(11),unique=True) #手机号码
  21. info = db.Column(db.Text) #个性简介
  22. face = db.Column(db.String(255),unique=True) #头像
  23. addtime = db.Column(db.DateTime,index=True,default=datetime.utcnow)
  24. uuid = db.Column(db.String(255),unique=True) #唯一标识符
  25. userlogs = db.relationship('Userlog',backref='user') #会员日志外键关系
  26. comments = db.relationship('Comment',backref='user') #评论外键关系
  27. moviecols = db.relationship('Moviecol',backref='user') #收藏外键关系
  28.  
  29. #定义一个方法,返回的类型
  30. def __repr__(self):
  31. return "<User %r>" % self.name
  32. #会员登录日志
  33. class Userlog(db.Model):
  34. __tablename__ = "userlog" #定义表名
  35. id = db.Column(db.Integer,primary_key=True) #编号
  36. #定义外键 db.ForeignKey
  37. user_id = db.Column(db.Integer,db.ForeignKey('user.id')) #所属会员
  38. ip = db.Column(db.String(100)) #登录IP
  39. addtime = db.Column(db.DateTime,index=True,default=datetime.utcnow) #登录时间 ,默认时间
  40.  
  41. def __repr__(self):
  42. return "<Userlog %r>" % self.id
  43.  
  44. #定义标签
  45. class Tag(db.Model):
  46. __tablename__ = "tag" #定义表名称
  47. id = db.Column(db.Integer,primary_key=True) #编号
  48. name = db.Column(db.String(100),unique=True) #名称
  49. addtime = db.Column(db.DateTime,index=True,default=datetime.utcnow) #添加时间
  50. movies = db.relationship("Movie",backref='tag') #电影外键关系关联
  51. #返回类型
  52. def __repr__(self):
  53. return "<Tag %r>" %self.name
  54.  
  55. #电影
  56. class Movie(db.Model):
  57. __tablename__ = "movie" #定义表名称
  58. id = db.Column(db.Integer,primary_key=True) #编号
  59. title = db.Column(db.String(255),unique=True) #标题
  60. url = db.Column(db.String(255),unique=True) #地址
  61. info = db.Column(db.Text) #简介
  62. logo = db.Column(db.String(255),unique=True) #封面
  63. star = db.Column(db.SmallInteger) #星级 小整形
  64. playnum = db.Column(db.BigInteger) #播放量
  65. commentnum = db.Column(db.BigInteger) #评论量
  66. tag_id = db.Column(db.Integer,db.ForeignKey('tag.id')) #所属标签
  67. area = db.Column(db.String(255)) #上映地区
  68. release_time = db.Column(db.Date) #上映时间
  69. length = db.Column(db.String(100)) #播放时间
  70. addtime = db.Column(db.DateTime,index=True, default=datetime.utcnow) #添加时间
  71. comments = db.relationship("Comment",backref='movie') #评论外键关系关联
  72. moviecols = db.relationship("Moviecol",backref='movie') #收藏外键关系关联
  73.  
  74. def __repr__(self):
  75. return "<Movie %r>" %self.title
  76. #上映预告
  77. class Preview(db.Model):
  78. __tablename__ = "preview" #定义表名
  79. id = db.Column(db.Integer,primary_key=True) #编号
  80. title = db.Column(db.String(255),unique=True) #标题
  81. logo = db.Column(db.String(255),unique=True) #封面
  82. addtime = db.Column(db.DateTime,index=True,default=datetime.utcnow) #添加时间
  83. def __repr__(self):
  84. return "<Preview %r>" %self.title
  85.  
  86. #评论
  87. class Comment(db.Model):
  88. __tablename__ = "comment" #定义表名
  89. id = db.Column(db.Integer,primary_key=True) #编号
  90. content = db.Column(db.Text) #内容
  91. movie_id = db.Column(db.Integer,db.ForeignKey('movie.id')) #所属电影
  92. user_id = db.Column(db.Integer,db.ForeignKey('user.id')) #所属用户
  93. addtime = db.Column(db.DateTime,index=True,default=datetime.utcnow) #添加时间
  94. def __repr__(self):
  95. return "<Comment %r>" %self.id
  96.  
  97. #电影收藏
  98. class Moviecol(db.Model):
  99. __tablename__ = "moviecol" #定义表名
  100. id = db.Column(db.Integer,primary_key=True) #编号
  101. movie_id = db.Column(db.Integer,db.ForeignKey('movie.id')) #所属电影
  102. user_id = db.Column(db.Integer,db.ForeignKey('user.id')) #所属用户
  103. addtime = db.Column(db.DateTime,index=True,default=datetime.utcnow) #添加时间
  104. def __repr__(self):
  105. return "<Moviecol %r>" % self.id
  106.  
  107. #权限
  108. class Auth(db.Model):
  109. __tablename__ = "auth" #定义表名
  110. id = db.Column(db.Integer,primary_key=True) #编号
  111. name = db.Column(db.String(100),unique=True) #名称
  112. url = db.Column(db.String(255),unique=True) #地址
  113. addtime = db.Column(db.DateTime,index=True,default=datetime.utcnow) #添加时间
  114. def __repr__(self):
  115. return "<Auth %r>" % self.name
  116. #角色
  117. class Role(db.Model):
  118. __tablename__ = "role" #定义表名
  119. id = db.Column(db.Integer,primary_key=True) #编号
  120. name = db.Column(db.String(100),unique=True) #名称
  121. auths = db.Column(db.String(600))
  122. addtime = db.Column(db.DateTime,index=True,default=datetime.utcnow) #添加时间
  123. def __repr__(self):
  124. return "<Role %r>" % self.name
  125.  
  126. #管理员
  127. class Admin(db.Model):
  128. __tablename__ = "admin" #存入表名称
  129. id = db.Column(db.Integer, primary_key=True) #编号
  130. name = db.Column(db.String(100),unique=True) #管理员账号
  131. pwd = db.Column(db.String(100)) #管理员密码
  132. is_super = db.Column(db.SmallInteger) #是否为超级管理员,0为超级管理员
  133. role_id = db.Column(db.Integer,db.ForeignKey('role.id')) #所属角色
  134. addtime = db.Column(db.DateTime,index=True,default=datetime.utcnow) #添加时间
  135. adminlogs = db.relationship("Adminlog",backref='admin') #管理员登录日志外键关系关联
  136. oplogs = db.relationship("Oplog",backref='admin') #管理员操作日志外键关系关联
  137. def __repr__(self):
  138. return "<Role %r>" % self.name
  139.  
  140. #管理员登录日志
  141. class Adminlog(db.Model):
  142. __tablename__ = "adminlog" #定义表名
  143. id = db.Column(db.Integer,primary_key=True) #编号
  144. #定义外键 db.ForeignKey
  145. admin_id = db.Column(db.Integer,db.ForeignKey('admin.id')) #所属管理员
  146. ip = db.Column(db.String(100)) #登录IP
  147. addtime = db.Column(db.DateTime,index=True,default=datetime.utcnow) #登录时间 ,默认时间
  148. def __repr__(self):
  149. return "<Adminlog %r>" % self.id
  150.  
  151. #操作日志
  152. class Oplog(db.Model):
  153. __tablename__ = "oplog" #定义表名
  154. id = db.Column(db.Integer,primary_key=True) #编号
  155. #定义外键 db.ForeignKey
  156. admin_id = db.Column(db.Integer,db.ForeignKey('admin.id')) #所属管理员
  157. ip = db.Column(db.String(100)) #登录IP
  158. reason = db.Column(db.String(600)) #操作原因
  159. addtime = db.Column(db.DateTime,index=True,default=datetime.utcnow) #登录时间 ,默认时间
  160. def __repr__(self):
  161. return "<Oplog %r>" % self.id
  162.  
  163. if __name__ == "__main__":
  164. #db.create_all()
  165. '''role = Role(
  166. name="超级管理员",
  167. auths=" "
  168. )
  169. db.session.add(role)
  170. db.session.commit()'''
  171. from werkzeug.security import generate_password_hash #导入一个生成密码的工具
  172. admin = Admin(
  173. name="flower",
  174. pwd=generate_password_hash("123456"),
  175. is_super=0,
  176. role_id=1
  177. )
  178. #调用admin
  179. db.session.add(admin)
  180. db.session.commit()

  

flask-数据库模型设计2的更多相关文章

  1. 数据库模型设计PowerDesigner

    Power Designer 是Sybase公司的CASE工具集,使用它可以方便地对管理信息系统进行分析设计,他几乎包括了数据库模型设计的全过程.利用Power Designer可以制作数据流程图.概 ...

  2. One to One 的数据库模型设计与NHibernate配置

    在数据库模型设计中,最基本的实体关系有三种:一对一.一对多.多对多.关于一对多和多对多使用的情况较多,之前也有过一些讨论,现在来说明一下在数据库中一对一的模型设计. 首先,关系数据库中使用外键来表示一 ...

  3. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(15)-用户登录详细错误和权限数据库模型设计

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(15)-用户登录详细错误和权限数据库模型设计     ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)    ...

  4. 实验3、Flask数据库操作-如何使用Flask与数据库

    1. 实验内容 数据库的使用对于可交互的Web应用程序是极其重要的,本节我们主要学习如何与各种主要数据库进行连接和使用,以及ORM的使用 2. 实验要点 掌握Flask对于各种主要数据库的连接方法 掌 ...

  5. 细说flask数据库迁移

    什么情况下要用数据库迁移? 在开发过程中,需要修改数据库模型,而且还要在修改之后更新数据库.最直接的方式就是删除旧表,但这样会丢失数据. 更好的解决办法是使用数据库迁移框架,它可以追踪数据库模式的变化 ...

  6. flask数据库迁移理解及命令

    前言: 使用数据库迁移,可以直接建表,而不用我们自己写sql语句用来建表.就是将关系型数据库的一张张表转化成了Python的一个个类. 在开发中经常会遇到需要修改原来的数据库模型,修改之后更新数据库, ...

  7. 03 flask数据库操作、flask-session、蓝图

    ORM ORM 全拼Object-Relation Mapping,中文意为 对象-关系映射.主要实现模型对象到关系数据库数据的映射. 1.优点 : 只需要面向对象编程, 不需要面向数据库编写代码. ...

  8. flask~数据库

    flask与数据库的连接基于flaks_sqlaichemy 扩展 首先要连接数据库的时候必须得先下载 pip install flask-sqlalchemy 这个扩展 flask框架与数据库的连接 ...

  9. flask数据库操作

    Python 数据库框架 大多数的数据库引擎都有对应的 Python 包,包括开源包和商业包.Flask 并不限制你使用何种类型的数据库包,因此可以根据自己的喜好选择使用 MySQL.Postgres ...

  10. EF基础知识小记四(数据库=>模型设计器)

    EF基础知识小记三(设计器=>数据库)介绍了如何创建一个空设计器模型,并如何将模型同步到数据库的表中,本文则主要介绍如何将一个存在的数据库同步到模型设计器中.为了能快速的模拟这个过程,给出一下建 ...

随机推荐

  1. JavaScript获取星期几的几种方法

    星期几的4种JS代码写法,有需要的朋友可以参考一下   第一种写法 代码如下: var str = ""; var week = new Date().getDay(); if ( ...

  2. Mysql 函数使用记录(三)——UNIX_TIMESTAMP() 、UNIX_TIMESTAMP(date)

    参考资料:https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_unix-timestamp UN ...

  3. hdu 2034 改革春风吹满地 多边形面积

    改革春风吹满地 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Problem ...

  4. python (协程)生产者,消费者

    #coding=utf- import gevent from gevent.queue import Queue, Empty import time tasks = Queue(maxsize=) ...

  5. tomcat+nginx实现均衡负载

    在项目运营时,我们都会遇到一个问题,项目需要更新时,我们可能需先暂时关闭下服务器来更新.但这可能会出现一些状况: 1.用户还在操作,被强迫终止了(我们可以看日志等没人操作的时候更新,但总可能会有万一) ...

  6. 力扣(LeetCode)412. Fizz Buzz

    写一个程序,输出从 1 到 n 数字的字符串表示. 如果 n 是3的倍数,输出"Fizz": 如果 n 是5的倍数,输出"Buzz": 3.如果 n 同时是3和 ...

  7. django数据库的增、删、改、查

    1.增加 第一种:save 通过创建模型类对象,执行对象的save()方法保存到数据库中. 第二种:create 2.修改 3.查询 get 查询单一结果,如果不存在会抛出模型类.DoesNotExi ...

  8. win10 cmake编译 opencv4.0 + pyhton3.7x64

    在超极本上本来不想编译了,反正没有cuda.但发现即使下载的opencv_contrib也不包含sift等等nonfree库了,要自己编译开编译选项才可以.坑啊,自己编译吧.反正opencv已经这么庞 ...

  9. variable_scope

    1. with tf.variable_scope("a"): b=tf.get_variable(name="g",initializer=12) print ...

  10. QT信号槽详解

    1         QT信号槽详解 1.1  信号和槽的定义 信号是触发信号,例如按钮的点击触发一个clicked信号,槽是用来接收信号,并处理信号,相当于信号响应函数.一个信号可以关联多个槽函数,信 ...