第三章、项目分析、搭建目录及模型设计

3.1.前后台项目目录分析

微电影网站

  • 前台模块
  • 后台模块

前台(home)

  • 数据模型:models.py
  • 表单处理:home/forms.py
  • 模板目录:templates/home

后台(admin)

  • 数据模型:models.py
  • 表单处理:admin/forms.py
  • 模板目录:templates/admin
  • 静态文件:static

开始创建目录,如下:

3.2.蓝图构建项目目录

什么是蓝图?

一个应用中或跨用用制作应用组件和支持通用的模式

蓝图的作用

  • 将不同的功能模块化

  • 构建大型应用
  • 优化项目结构
  • 增强可读性,易于维护

如何使用蓝图构建项目目

(1)home/__init__.py

#coding:utf-8
__author__ = 'derek' from flask import Blueprint home = Blueprint("home",__name__) import app.home.views

(2)admin/__init__.py

#coding:utf-8
__author__ = 'derek' from flask import Blueprint admin = Blueprint("admin",__name__) import app.admin.views

(3)home/views.py

#coding:utf-8
__author__ = 'derek' from . import home #导入蓝图 @home.route("/")
def index():
return "<h1 style='color:green'>this is home</h1>"

(4)admin/views.py

#coding:utf-8
__author__ = 'derek' from . import admin #导入蓝图 @admin.route("/")
def index():
return "<h1 style='color:red'>this is admin</h1>"

(5)app/__init__.py

#coding:utf-8
__author__ = 'derek' 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") #url_prefix添加前缀

(6)app/manage.py

#coding:utf-8
__author__ = 'derek' from app import app # 导入的app是app/__init__中实例化的对象:app = Flask(__name__) if __name__ == '__main__':
app.run()

(7)运行项目(manage,py)

home

admin

3.3.会员及会员登录日志数据模型设计

(1)安装flask-sqlalchemy

pip install -i https://pypi.douban.com/simple --trusted-host pypi.douban.com flask-sqlalchemy

(2)app/models.py

Flask-SQLAlchemy 配置

表结构的设计

#coding:utf-8
__author__ = 'derek'
from datetime import datetime
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import pymysql
app = Flask(__name__)
#连接mysql数据库(用户名、密码、ip、端口和数据库名字)
app.config["SQLALCHEMY_DATABASE_URI"] = "mysql+pymysql://root:123456@127.0.0.1:3306/movie"
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = True db = SQLAlchemy(app) #会员
class User(db.Model): #继承db.Model
__tablename__ = "user" #数据库中表显示的名字
id = db.Column(db.Integer,primary_key=True) #编号,int类型,主键
name = db.Column(db.String(100),unique=True) #昵称,字符串类型(长度100),唯一
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.now) #添加时间
uuid = db.Column(db.String(255),unique=True) #唯一标识符
userlogs = db.relationship('UserLog',backref='user') #会员日志外键关系 def __repr__(self):
return "<User %r>"%self.name #会员登录日志
class UserLog(db.Model):
__tablename__ = "userlog"
id = db.Column(db.Integer,primary_key=True) #编号
#跟User表的id外键关联,类名小写
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.now) #登录时间 def __repr__(self):
return "<UserLog %r>"%self

3.4.标签、电影、上映预告数据模型设

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.now) #添加时间
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.now) #添加时间 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.now) def __repr__(self):
return "<Preview %r>"%self.title

3.5.评论及收藏电影数据模型设计

#评论
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.now) #添加时间 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.now) # 添加时间 def __repr__(self):
return "Moviecol %r" % self.id

要对应的跟User和Movie关联起来

class User(db.Model):
.
.
.
comments = db.relationship("Comment",backref="user") #评论外键关系关联
moviecols = db.relationship("Moviecol",backref="user") #电影收藏外键关系关联
class Movie(db.Model):
'
'
'
comments = db.relationship("Comment",backref="movie" ) #评论外键关系关联
moviecols = db.relationship("Moviecol",backref="movie" ) #电影收藏外键关系关联

3.6.权限及角色数据模型设计

#权限
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.now) #添加时间 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.now) #添加时间 def __repr__(self):
return "<Role %r>"%self.name

3.7.管理员、登录日志、操作日志数据模型设计

#管理员
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.now) #添加时间
adminlogs = db.relationship("Adminlog",backref='admin') #管理员登录日志外键关系关联
oplogs = db.relationship("Oplog",backref='admin') #管理员操作日志外键关系关联 def __repr__(self):
return "<Admin %r>"%self.id #管理员登录日志
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.now) #登录时间 def __repr__(self):
return "Adminlog %r"%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.now) #登录时间 def __repr__(self):
return "Oplog %r" % self.id

3.8.生成数据库表

(1)创建数据库

create database derek default charset utf8 collate utf8_general_ci;

(2)安装pymysql

pip install pymysql

(3)在models.py下面加上代码,然后运行,就生成到数据库里面了

if __name__ == '__main__':
db.create_all()
#coding:utf-8
__author__ = 'derek' import pymysql
from flask import Flask
from datetime import datetime from flask_sqlalchemy import SQLAlchemy app = Flask(__name__)
#连接mysql数据库(用户名、密码、ip、端口和数据库名字)
app.config["SQLALCHEMY_DATABASE_URI"] = "mysql+pymysql://root:123456@127.0.0.1:3306/movie"
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = True db = SQLAlchemy(app) #会员
class User(db.Model): #继承db.Model
__tablename__ = "user" #数据库中表显示的名字
id = db.Column(db.Integer,primary_key=True) #编号,int类型,主键
name = db.Column(db.String(100),unique=True) #昵称,字符串类型(长度100),唯一
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.now) #添加时间
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) #编号
#跟User表的id外键关联,类名小写
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.now) #登录时间 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.now) #添加时间
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.now) #添加时间
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.now) 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.now) #添加时间 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.now) # 添加时间 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.now) #添加时间 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.now) #添加时间 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.now) #添加时间
adminlogs = db.relationship("Adminlog",backref='admin') #管理员登录日志外键关系关联
oplogs = db.relationship("Oplog",backref='admin') #管理员操作日志外键关系关联 def __repr__(self):
return "<Admin %r>"%self.id #管理员登录日志
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.now) #登录时间 def __repr__(self):
return "Adminlog %r"%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.now) #登录时间 def __repr__(self):
return "Oplog %r" % self.id

models.py所有代码

(4)查看数据库

show databases;
user movie;
show tables;

(5)添加一个角色

if __name__ == '__main__':
# db.create_all() role = Role(
name="超级管理员",
auths=""
)
db.session.add(role)
db.session.commit()

取数据库查看

desc role;
select * from role;

(6)添加一个管理员

密码保存的时候采用hash加密

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="derek",
pwd=generate_password_hash(""),
is_super=0,
role_id=1
)
db.session.add(admin)
db.session.commit()

查看数据库

select * from admin\G;

上一篇:Flask构建微电影(一)

Flask构建微电影(二)的更多相关文章

  1. Python flask 构建微电影视频网站☝☝☝

    Python flask 构建微电影视频网站☝☝☝ 1.安装数据库连接依赖包 pip install flask-sqlalchemy 2.创建movie数据库 在CentOS虚拟机,进入MaridD ...

  2. Python flask 构建微电影视频网站✍✍✍

    Python flask 构建微电影视频网站  整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程本身没问题,大 ...

  3. Flask构建微电影(一)

    第一章.项目介绍  1.1.前言    本教程我将带领大家如何使用flask框架开发微电影网站.Flask是python中最受欢迎的轻量级web框架,flask扩展丰富,冗余度小,可自由选择组合各种插 ...

  4. Flask 构建微电影视频网站(一)

    Flask构建电影视频网站 Python MTV模型 Flask微内核 Flask扩展插件配置及使用方法 根据业务开发网站前后台功能 Flask结合MySQL数据库 你将可以独立开发网站 独立部署运维 ...

  5. Flask 构建微电影视频网站(二)

    搭建前台页面 前台布局搭建 将static中的文件拷贝到项目的static目录下 在app/templates/home下新建home.html,当作基础模板,并修改静态资源链接 <!docty ...

  6. Python Flask 构建微电影视频网站

    前言 学完本教程,你将掌握: 1.学会使用整形.浮点型.路径型.字符串型正则表达式路由转化器 2.学会使用post与get请求.上传文件.cookie获取与相应.404处理 3.学会适应模板自动转义. ...

  7. Flask 构建微电影视频网站(四)

    后台管理 实现后台管理系统使用flask sqlalchemy结合mysql数据库进行增删改查操作.分页的使用.路由装饰器定义.模板中变量调用.登录会话机制.上传文件.flask wtforms表单使 ...

  8. Flask 构建微电影视频网站(八)

    评论收藏及弹幕 实现电影评论添加及列表.数据查询实现统计播放量和评论量.jquery ajax实现收藏电影,flask结合redis消息队列实现电影弹幕,bug处理等功能. 电影评论-统计 class ...

  9. Flask 构建微电影视频网站(三)

    搭建后台页面 视图函数位于admin文件夹下, app/admin/views.py 管理员登录页面搭建 视图函数 @admin.route('/') def index(): return '后台主 ...

随机推荐

  1. 关于C++程序的编码问题

    转自: http://blog.chinaunix.net/uid-26790551-id-3190813.html 我们传统的程序基本都只在Windows或只在Linux下运行,Windows程序使 ...

  2. 关于Android自定义view 你所需要知道的基本函数

    开始时之前想吐槽一句..iphone的闹钟,12小时制.我成功的把闹钟订到了下午5:00 导致错过一班飞机.心疼改签费. 候机ing,没有事做,来写一下学习自定义view必须掌握的基本函数.这里只挑一 ...

  3. [查阅]MSIL Instruction Set

    Base Instructions   Instruction Description Stack Transition 1 add add two values, returning a new v ...

  4. 二叉树的最大深度算法面试题-leetcode学习之旅(3)

    标题 Maximum Depth of Binary Tree 描述 The maximum depth is the number of nodes along the longest path f ...

  5. 【Qt编程】Qt 小时钟

    Hello World! 学习编程语言的最简单最经典的小程序,当然Qt也不例外.在学习画图时,我觉得写个时钟小程序也是个比较好的开始.在之前的<Matlab及Java小时>一文中,我也从写 ...

  6. 从头到尾解析Hash表算法

    via:点击打开链接 十一.从头到尾解析Hash 表算法 作者:July.wuliming.pkuoliver   出处:http://blog.csdn.net/v_JULY_v.   说明:本文分 ...

  7. 【面试笔试算法】Program 2:Amusing Digits(网易游戏笔试题)

    时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 网易成立于1997年6月,是中国领先的互联网技术公司.其相继推出了门户网站.在线游戏.电子邮箱.在线教育.电子商务等多种服 ...

  8. 【生活随笔】Introspection of my life in 2014

       2014年已过去两星期,有写年度总结的必要了.今天特意看了看去年1月5日写的2013年度总结,看看都有些什么变化.我发现每年作一次总结是很有必要的,无赖恰逢考试周,连元旦都不能好好过,更不用说写 ...

  9. 2014年终开发感悟(Tamic)

    接触Anroid已经一年过了,眼看就要2015年的到来,但是在这不长不短的时间以来,虽然没给IT圈贡献过什么大的开源项目,但是自己也一直在坚持着自己的爱好,也在不断的更新着自己博客,有  一次项目中偶 ...

  10. 使IFRAME在iOS设备上支持滚动

    原文链接: Scroll IFRAMEs on iOS原文日期: 2014年07月02日 翻译日期: 2014年07月10日翻译人员: 铁锚很长时间以来, iOS设备上Safari中超出边界的元素将不 ...