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的更多相关文章
- 数据库模型设计PowerDesigner
Power Designer 是Sybase公司的CASE工具集,使用它可以方便地对管理信息系统进行分析设计,他几乎包括了数据库模型设计的全过程.利用Power Designer可以制作数据流程图.概 ...
- One to One 的数据库模型设计与NHibernate配置
在数据库模型设计中,最基本的实体关系有三种:一对一.一对多.多对多.关于一对多和多对多使用的情况较多,之前也有过一些讨论,现在来说明一下在数据库中一对一的模型设计. 首先,关系数据库中使用外键来表示一 ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(15)-用户登录详细错误和权限数据库模型设计
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(15)-用户登录详细错误和权限数据库模型设计 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) ...
- 实验3、Flask数据库操作-如何使用Flask与数据库
1. 实验内容 数据库的使用对于可交互的Web应用程序是极其重要的,本节我们主要学习如何与各种主要数据库进行连接和使用,以及ORM的使用 2. 实验要点 掌握Flask对于各种主要数据库的连接方法 掌 ...
- 细说flask数据库迁移
什么情况下要用数据库迁移? 在开发过程中,需要修改数据库模型,而且还要在修改之后更新数据库.最直接的方式就是删除旧表,但这样会丢失数据. 更好的解决办法是使用数据库迁移框架,它可以追踪数据库模式的变化 ...
- flask数据库迁移理解及命令
前言: 使用数据库迁移,可以直接建表,而不用我们自己写sql语句用来建表.就是将关系型数据库的一张张表转化成了Python的一个个类. 在开发中经常会遇到需要修改原来的数据库模型,修改之后更新数据库, ...
- 03 flask数据库操作、flask-session、蓝图
ORM ORM 全拼Object-Relation Mapping,中文意为 对象-关系映射.主要实现模型对象到关系数据库数据的映射. 1.优点 : 只需要面向对象编程, 不需要面向数据库编写代码. ...
- flask~数据库
flask与数据库的连接基于flaks_sqlaichemy 扩展 首先要连接数据库的时候必须得先下载 pip install flask-sqlalchemy 这个扩展 flask框架与数据库的连接 ...
- flask数据库操作
Python 数据库框架 大多数的数据库引擎都有对应的 Python 包,包括开源包和商业包.Flask 并不限制你使用何种类型的数据库包,因此可以根据自己的喜好选择使用 MySQL.Postgres ...
- EF基础知识小记四(数据库=>模型设计器)
EF基础知识小记三(设计器=>数据库)介绍了如何创建一个空设计器模型,并如何将模型同步到数据库的表中,本文则主要介绍如何将一个存在的数据库同步到模型设计器中.为了能快速的模拟这个过程,给出一下建 ...
随机推荐
- cron,linux定时脚本
Linux的cron和crontab Cron定时执行工具详解 Linux下的crontab定时执行任务命令详解 Linux上启动Cron任务 [linux]解析crontab cron表达式详解 c ...
- spring applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.spr ...
- python requests post和get
import requests import time import hashlib import os import json from contextlib import closing impo ...
- 什么是可哈希的(hashable)
如果一个对象在自己的生命周期中有一哈希值(hash value)是不可改变的,那么它就是可哈希的(hashable)的,因为这些数据结构内置了哈希值,每个可哈希的对象都内置了__hash__方法,所以 ...
- python中的print()、str()和repr()的区别
print()函数,我们可以看出,在Python IDLE中直接输入的字符串都是有类型的,而print打印后的字符串相当于一串文字,把字符串的引号也省略了,没有类型 print()函数,生成可读性更好 ...
- 消息队列rabitMq
rabbitmq MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法.应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们.消息 ...
- spring cloud: Hystrix(七):Hystrix的断容器监控dashboard
Hystrix的断容器监控dashboard. dashboard是用来监控Hystrix的断容器监控的,图形化dashboard是如何实现指标的收集展示的. dashboard 本地端口8730 项 ...
- Yii2给数据库表添加字段后对应模型无法识别到该属性的原因和解决办法
Yii2给数据库表添加字段后对应模型无法识别到该属性的原因和解决办法 应为数据库表的结构被缓存了.删除runtime文件夹或者执行 //清理指定表结构缓存数据 Yii::$app->db-> ...
- 雷林鹏分享:C# 运算符
C# 运算符 运算符是一种告诉编译器执行特定的数学或逻辑操作的符号.C# 有丰富的内置运算符,分类如下: 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 杂项运算符 本教程将逐一讲解算术运算 ...
- tomcat ----> 源码关联/编译/....
今天在搞Servlet时想看下tomcat Servlet-API.jar的源码,按照惯性思维用以往关联SSH2框架的源码的方式去做但是结果没有成功,尝试过换不同的文件夹,起初怀疑可能是路径太深关联不 ...