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

#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()

  

最新文章

  1. Cesium原理篇:7最长的一帧之Entity(上)
  2. request操作的几个容易混淆的请求路径
  3. C语言PRO2
  4. iOS Block浅析
  5. Node.js 学习(五)Node.js 事件循环
  6. OpenWRT交叉编译
  7. Linux下静态编译Qt程序
  8. CentOS-6.5-x86_64 最小化安装后,怎样安装 man 程序?
  9. [ios2]蓝牙通信【转】
  10. hadoop文件系统浅析
  11. 关于Winform中的用户代理
  12. cvpr2017:RSVP
  13. C# 防止同时调用=========使用读写锁三行代码简单解决多线程并发的问题
  14. 团队作业4——第一次项目冲刺(Alpha版本)11.18
  15. Java学习之栈和堆的区别
  16. 34 文件地理数据库(GDB)变文件夹了怎么办
  17. Ubuntu最常见的包问题
  18. 第65节:Java后端的学习之Spring基础
  19. 05 IO和管道
  20. 你不知道的Linux(持续更新中)

热门文章

  1. kubernetes 实战5_命令_Assign Pods to Nodes&amp;Configure a Pod to Use a ConfigMap
  2. Python-ConfigParser获取配置项名称大小写问题
  3. Ubuntu14.04下 升级 cmake
  4. 操作 html 的时候是使用 dom 方法还是字符串拼接?
  5. python学习 day018打卡 反射
  6. android studio 的基本使用和建立一个小项目
  7. 在用node安装某个全局模块的时候,没有权限修改node_modules
  8. XMind 8 Update 7 Pro 激活码
  9. 借助JCharDet获取文件字符集
  10. 温馨小程序前端布局Flex