1.安装数据库连接依赖包

pip install flask-sqlalchemy

2.创建movie数据库

在CentOS虚拟机,进入MaridDB数据库提示符,创建movie数据库

create database movie

3.定义MaridDB数据库连接

在app目录下的__init__.py文件中添加以下内容

# _*_coding:utf-8_*_

from flask import Flask, render_template
from flask_sqlalchemy import SQLAlchemy
import pymysql # 实例化Flask类得到app对象
app = Flask(__name__) # 定义连接的数据库
app.config['SQLALCHEMY_DATABASE_URI'] = "mysql+pymysql://root:root1234@192.168.81.10:3306/movie" # 如果设置成True(默认情况),Flask-SQLAlchemy将会追踪对象的修改并且发送信号
# 这需要额外的内存,如果不必要的可以禁用
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True # 定义secret_key
app.config['SECRET_KEY'] = "6bd749587aad49399f674b202a07d56f" db = SQLAlchemy(app)

4.定义数据模型类

在app目录下创建models.py文件,文件内容为

# _*_coding:utf-8_*_

from datetime import datetime
from app import db

4.1 定义会员数据模型

# 会员
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') # 会员登录日志外键关系关联
comments = db.relationship('Comment', backref='user') # 评论外键关系关联
moviecols = db.relationship('Moviecol', backref='user') # 电影收藏外键关系关联 # 返回定义类型
def __repr__(self):
return "<User %r>" % self.name # 检测密码,判断用户输入的密码是否与数据库中保存的用户的密码相同
def check_pwd(self,pwd):
from werkzeug.security import check_password_hash
return check_password_hash(self.pwd,pwd)

4.2 定义会员登录日志数据模型

# 会员登录日志
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.now) # 最近登录时间 def __repr__(self):
return "<Userlog %r>" % self.id

4.3 定义标签数据模型

# 电影标签
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

4.4 定义电影数据模型

# 电影
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

4.5 定义上映预告数据模型

# 上映预告
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

4.6 定义电影评论数据模型

# 电影评论
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

4.7 定义电影收藏数据模型

# 电影收藏
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) # 添加收藏时间 def __repr__(self):
return "<Moviecol %r>" % self.id

4.8 定义权限数据模型

# 权限
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(100), unique=True) # 地址
addtime = db.Column(db.DateTime, index=True, default=datetime.now) # 添加时间 def __repr__(self):
return "<Auth %r>" % self.name

4.9 定义角色数据模型

# 角色
class Role(db.Model):
__tablename__ = 'role' # 定义用户角色表在数据库中的名称
id = db.Column(db.Integer, primary_key=True) # 编号
name = db.Column(db.String(128), unique=True) # 角色名称
auths = db.Column(db.String(512))
addtime = db.Column(db.DateTime, index=True, default=datetime.now) # 添加时间
admins = db.relationship("Admin", backref='role') # 管理员外键关系关联 def __repr__(self):
return "<Role %r>" % self.name

4.10 定义管理员数据模型

# 管理员
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.name def check_pwd(self, pwd):
from werkzeug.security import check_password_hash
return check_password_hash(self.pwd, pwd)

4.11 定义管理员登录日志数据模型

# 管理员登录日志
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

4.12 定义用户操作日志

# 操作日志
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文件保存所有的模型类

5. 创建数据库

models.py文件中,定义main函数,在MariaDB数据库中生成前面定义的模型表

if __name__ == '__main__':
db.create_all()

单独执行models.py文件,在MariaDB数据库的movie数据库中创建数据表

数据库创建完成,进入MariaDB数据库提示符,查看创建的数据表

Flask开发微电影网站(二)的更多相关文章

  1. Flask开发微电影网站(一)

    1.用到的Flask知识 1.使用整形,浮点型,路径型,字符串型下正则表达式路由转化器 2.使用GET与POST请求,上传文件,cookie获取与响应,404处理 3.使用模板自动转义,定义过滤器,定 ...

  2. Flask开发微电影网站(三)

    页面完成后的最终布局 可以看到,页面共同的部分是顶部导航和底部导航 所以我们可以把页面顶部导航和底部导航部分单独定义一个文件home.html,然后让需要使用顶部导航和底部导航的页面都继承home.h ...

  3. Flask开发微电影网站(五)

    后台管理页面是系统管理员登录后对网站进行管理的前端页面 后台登录页面,如下图所示 管理员登录后的页面,如下图所示 管理员登录后,在右上角显示的管理员信息,如下图所示 管理员登录后,在页面中间部分的左侧 ...

  4. Flask开发微电影网站(七)

    1.后台管理之电影管理 1.1 定义电影表单 在app的admin目录的forms.py文件中,定义电影表单 # 电影表单 class MovieForm(FlaskForm): title = St ...

  5. Flask开发微电影网站(六)

    1. 后台管理登录功能实现 1.1 后台管理页面登录表单LoginForm 在app的admin目录下创建forms.py文件,用来保存admin蓝图中需要使用到的表单 from flask_wtf ...

  6. Flask开发微电影网站(十)

    1.后台管理之角色管理 1.1 角色管理之定义角色表单 在app的admin目录的forms.py文件中,定义角色表单 # 角色表单 class RoleForm(FlaskForm): name = ...

  7. Flask开发微电影网站(九)

    1.后台管理之电影管理 1.1 电影管理之所有电影收藏列表 1.1.1 电影管理之电影收藏列表视图函数 在admin目录下的views.py文件中定义电影收藏列表视图函数 电影收藏列表视图函数需要被登 ...

  8. Flask开发微电影网站(八)

    1.后台管理之电影预告管理 1.1 定义电影预告表单 在app的admin目录的forms.py文件中,定义电影预告表单 # 预告表单 class PreviewForm(FlaskForm): ti ...

  9. Flask开发微电影网站(四)

    会员中心页面,如下图所示 用户登录后,修改密码页面,如下图所示 用户查看自己的评论页面,如下图所示 用户查看自己的登录日志页面,如下图所示 用户查看自己收藏的电影的页面,如下图所示 1. 定义用户主页 ...

随机推荐

  1. cocos2d-x 游戏开发之有限状态机(FSM) (二)

    cocos2d-x 游戏开发之有限状态机(FSM)  (二) 1 状态模式

  2. HBase Canary

    HBase  Canary 用于检测HBase 系统的状态.它对指定表的每一个region 抓取一行,来探测失败或者延迟. hbase org.apache.hadoop.hbase.tool.Can ...

  3. linux开发调试工具---GDB的使用

    编译 gcc  -g  xxx.c  -o xxxgdb gdb  xxxgdb 进入gdb调试界面 查看代码 list   ==>  l 设置断点   可以以函数为断点 /  行数 break ...

  4. css的框模型速查

    在css中,每个元素被视为一个框. 每个框具有3个属性: border 框的边框 margin 框与相邻框之间的距离 padding 框内容和边框之间的距离 对于margin存在一种特例:当元素底部页 ...

  5. asp.net core上使用redis探索(1)

    基于Ubuntu安装redis, 我找的一个很好的网站: https://www.digitalocean.com/community/tutorials/how-to-install-and-con ...

  6. java虚拟机的类加载机制

    引言 我们写的代码是放在.java文件中,经过编译器编译后,转成.class文件.Class文件是一串二进制流,它可以被各平台的虚拟机所接受,实现跨平台.      虚拟机将描述类的数据从class文 ...

  7. 通向从容之道——Getting things done读书笔记

    一.主要的两个目的:         1. 抓住所有一切需要处理的事情:         2. 训练自己在接受一切"输入信息"的前期作出决定.   二.目前的问题:         ...

  8. JavaScript 跨域之 POST 实现。

    javascript 跨域是一个很常见的问题,其中 jsonp 是一个最常用的手段,但是 jsonp 只支持 get,不支持 post,所以如果想通过 jsonp 来 post 一些数据,就头大了. ...

  9. docker的安装和基础使用

    Docker EE/Docker CE简介与版本规划 版本区别 Docker EE Docker EE由公司支持,可在经过认证的操作系统和云提供商中使用,并可运行来自Docker Store的.经过认 ...

  10. Angular6.0发布

    Angular v6 新版本重点关注工具链以及工具链在 Angular 中的运行速度问题. Angular v6 是统一整体框架.Material 和 CLI 三大 Angular 组件的第一个版本, ...