1. 程式人生 > >flask-數據庫模型設計2

flask-數據庫模型設計2

cno src area gpo Coding view mail 封面 log

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

  

flask-數據庫模型設計2