一、项目环境
Python3.6
Flask 0.12.2
二、项目目录分析
三、创建项目
1. 项目目录结构
2. 使用蓝图优化目录结构
(1). 什么是蓝图?
一个应用中或跨应用制作应用组件和支持通用的模式
(2). 蓝图的作用?
- 将不同的功能模块化
- 构建大型应用
- 优化项目结构
- 增强可读性、易于维护
(3). 蓝图构建项目目录
a. 定义蓝图(app/admin/__init__.py)
from flask import Blueprint admin = Blueprint('admin', __name__) import app.admin.views
b. 注册蓝图(app/__init__.py)
from flask import Flask app = Flask(__name__) app.debug = True 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')
c. 调用蓝图(app/admin/views.py)
from . import admin @admin.route('/') def index(): return 'index of amdin'
四、具体功能实现
1. 会员及会员登录日志数据模型设计
(1). 安装flask-sqlalchemy
pip install flask-sqlalchemy
(2). 定义数据库连接
from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:123456@127.0.0.1:3306/movie' db = SQLAlchemy(app)
(3). 创建对象映射关系
# 会员 class User(db.Model): __tablename__ = 'user' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(32), unique=True, nullable=False) pwd = db.Column(db.String(16)) 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)) addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow) uuid = db.Column(db.String(255), unique=True) userlog = db.relationship('UserLog', backref='user') def __repr__(self): return '<User %r>' % self.name # 会员登录日志 class UserLog(): __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(15)) addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow) def __repr__(self): return '<UserLog %r>' % self.id
2. 标签、电影、上映预告数据模型设计
# 标签 class Tag(db.Model): id = db.Column(db.Integer, primary_key=True) # 编号 name = db.Column(db.String(64), unique=True, nullable=False) # 标签名 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): id = db.Column(db.Integer, primary_key=True) # 编号 title = db.Column(db.String(64), unique=True, nullable=False) # 电影名 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) # 星级 play_num = db.Column(db.BigInteger) # 播放量 comment_num = db.Column(db.BigInteger) # 评论量 tag_id = db.Column(db.Integer, db.ForeignKey('tag.id')) # 所属标签 area = db.Column(db.String(64)) # 上映区域 release_time = db.Column(db.DateTime) # 上映时间 length = db.Column(db.String(32)) # 时长 addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow) # 添加时间 def __repr__(self): return '<Movie %r>' % self.title # 上映预告 class Preview(db.Model): id = db.Column(db.Integer, primary_key=True) # 编号 title = db.Column(db.String(64), unique=True, nullable=False) 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