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