- Flask構建電影視頻網站
- Python MTV模型
- Flask微內核
- Flask擴展插件配置及使用方法
- 根據業務開發網站前后台功能
- Flask結合MySQL數據庫
- 你將可以獨立開發網站 獨立部署運維網站
- werkzug工具箱
- pymysql數據庫驅動
- sqlalchemy數據庫orm
- wtforms表單驗證工具
- jinjia2模板引擎
- flask-script命令行腳本
- functools定義高階函數
- jwplayer播放器插件
- 視頻限速限IP訪問
- flv、mp4視頻格式支持
- Nginx點播實現
前台
會員登錄及注冊 / 會員中心 / 電影播放
電影評論 / 電影收藏
后台
管理員登錄 / 修改密碼 / 標簽管理
電影管理 / 上映預告管理 / 會員管理
評論管理 / 收藏管理 / 角色管理
權限管理 / 管理員管理 / 日志管理
模型設計
目錄結構
藍圖構建項目目錄
app/__init__.py
from flask import Flask
app = Flask(__name__)
from app.home import home as home_blueprint
from app.admin import admin as admin_blueprint
app.register_blueprint(home_blueprint)
app.register_blueprint(admin_blueprint, url_prefix='/admin')
app/home/__init__.py
from flask import Blueprint
home = Blueprint('home', __name__)
import app.home.views
app/admin/__init__.py
from flask import Blueprint
admin = Blueprint('admin', __name__)
import app.admin.views
會員及會員登錄日志數據模型設計
app/models.py
import datetime
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+mysqlconnector://root:123456@127.0.0.1:3306/movie'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
db = SQLAlchemy(app)
# 會員
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.datetime.now) # 添加時間
uuid = db.Column(db.String(255), unique=True, ) # 唯一標識符
userlog = db.relationship('Userlog', backref='user') # 會員日志外鍵關系關聯
comments = db.relationship('Comment', backref='user') # 評論外鍵關系關聯
moviecol = db.relationship('Moviecol', backref='user') # 收藏外鍵關系關聯
def __str__(self):
return "<User {}>".format(self.name)
# 會員登陸日志
class Userlog(db.Model):
__tablename__ = 'userlog'
id = db.Column(db.Integer, primary_key=True) # 編號
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.datetime.now) # 登錄時間
def __str__(self):
return "<Userlog {}>".format(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.datetime.now) # 添加時間
movies = db.relationship('Movie', backref='tag') # 電影標簽外鍵關聯
def __str__(self):
return "<Tag {}>".format(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.datetime.now) # 添加時間
comments = db.relationship('Comment', backref='movie') # 評論外鍵關系關聯
moviecol = db.relationship('Moviecol', backref='movie') # 收藏外鍵關系關聯
def __str__(self):
return "<Movie {}>".format(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.datetime.now) # 添加時間
def __str__(self):
return "<Preview {}>".format(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.datetime.now) # 評論時間
def __str__(self):
return "<Comment {}>".format(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.datetime.now) # 評論時間
def __str__(self):
return "<Moviecol {}>".format(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.datetime.now) # 添加時間
def __str__(self):
return '<Auth {}>'.format(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.datetime.now) # 添加時間
admins = db.relationship('Admin', backref='role') # 管理員外鍵關系關聯
def __str__(self):
return '<role {}>'.format(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.Boolean) # 是否為超級管理員
role_id = db.Column(db.Integer, db.ForeignKey('role.id')) # 所屬角色
addtime = db.Column(db.DateTime, index=True, default=datetime.datetime.now) # 添加時間
adminlogs = db.relationship('Adminlog', backref='admin') # 管理員登陸日志外鍵關系關聯
oplogs = db.relationship('Oplog', backref='admin') # 管理員操作日志外鍵關系關聯
def __str__(self):
return "<Admin {}>".format(self.name)
# 管理員登陸日志
class Adminlog(db.Model):
__tablename__ = 'adminlog'
id = db.Column(db.Integer, primary_key=True) # 編號
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.datetime.now) # 登錄時間
def __str__(self):
return "<Adminlog {}>".format(self.id)
# 操作日志
class Oplog(db.Model):
__tablename__ = 'oplog'
id = db.Column(db.Integer, primary_key=True) # 編號
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.datetime.now) # 登錄時間
def __str__(self):
return "<Oplog {}>".format(self.id)
映射到數據庫
安裝數據庫驅動插件pip install mysql-connector
if __name__ == '__main__':
db.create_all()
運行后就可以在數據庫中看到表了
嘗試添加一些數據
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="imoocadmin",
pwd=generate_password_hash('imoocadmin'),
is_super=True,
role_id=1
)
db.session.add(admin)
db.session.commit()