Flask开发微电影网站(二)

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 1.安装数据库连接依赖包pip install flask-sqlalchemy2.创建movie数据库在CentOS虚拟机,进入MaridDB数据库提示符,创建movie数据库create database movie3.

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数据库提示符,查看创建的数据表

img_eda2c3edc56ab6244220fae74660fa71.png

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
4月前
|
数据库 Python
如何使用Flask进行开发?
【9月更文挑战第1天】如何使用Flask进行开发?
55 3
|
5月前
|
SQL 缓存 数据库
神秘编程领域惊现宝藏!Flask 扩展生态究竟隐藏着怎样的神奇力量?快来揭开提升开发效率的秘密!
【8月更文挑战第31天】在 Flask 的世界里,其简洁而强大的核心框架搭配丰富多彩的扩展生态,为开发者带来了无尽可能性。从数据库集成到用户认证,从表单验证到缓存管理,Flask 提供了众多高质量插件,如 Flask-SQLAlchemy、Flask-WTF 和 Flask-Login,大幅提升了开发效率和代码质量。这些扩展如同宝库中的珍宝,等待着我们去探索和利用,但需谨慎选择以避免不必要的复杂性和性能问题。总之,Flask 的扩展生态助力我们更高效地开发 Web 应用,创造更多优秀作品。
38 0
|
6月前
|
JSON 数据格式 Python
Flask实现内部接口----pycharm安装及新建,location代表着文件路径,下面是Python的环境,Flask是由Python开发的框架,Python文件接口ython通过GET发送
Flask实现内部接口----pycharm安装及新建,location代表着文件路径,下面是Python的环境,Flask是由Python开发的框架,Python文件接口ython通过GET发送
|
6月前
|
API 数据库 开发者
逆袭之路!Django/Flask助你成为Web开发界的璀璨新星!
【7月更文挑战第13天】在Python Web开发中,Django和Flask各具优势。Django适合快速构建大型项目,如在线书店,其ORM和内置功能让复杂应用轻松上手。Flask则以其轻量和灵活性见长,适用于个人博客等小型应用。选择框架应根据项目需求和个人偏好,两者都能助开发者在Web开发领域大放异彩。
61 2
|
6月前
|
数据库 开发者 Python
从菜鸟到大神,Django/Flask 让你秒变 Web 开发界的‘头号玩家’!
【7月更文挑战第12天】在Python Web开发中,Django和Flask框架各具特色。Flask轻量灵活,适合快速搭建简单应用,如博客,基本代码仅需几行。Django则功能全面,适用于复杂项目,如电商网站,内置ORM和管理后台。两者都助力开发者从新手进阶。选择取决于项目需求和个人偏好。学习和实践这两个框架,能助你成为Web开发专家。
62 2
|
6月前
|
JSON 文字识别 数据格式
文本,文字识别,Flask实现内部接口开发,OCR外部接口的开发,如何开发一个识别接口,通过post调用,参数是图片的路径,内部调用,直接传图片路径就行
文本,文字识别,Flask实现内部接口开发,OCR外部接口的开发,如何开发一个识别接口,通过post调用,参数是图片的路径,内部调用,直接传图片路径就行
|
6月前
|
API Python
python flask 提供web的get/post开发
python flask 提供web的get/post开发
58 0
|
7月前
|
JSON API 数据格式
如何使用Flask开发RESTful API
RESTful API(Representational State Transferful Application Programming Interface)是一种基于 REST 架构风格设计的 Web 服务接口,用于实现资源的增删改查(CRUD)操作。它通过使用 HTTP 协议的不同方法(如 GET、POST、PUT、DELETE)和 URL 路径来对资源进行操作,并使用不同的状态码和数据格式进行响应。
66 1
|
6月前
|
开发者 C++ Python
从零到一,Django/Flask带你走进Web开发的梦幻世界!
【7月更文挑战第14天】在Python Web开发中,Django和Flask各具特色。Django是全能框架,提供ORM、模板、认证等全套解决方案,适合快速建站和新手入门;Flask则轻量灵活,适合原型开发和定制化需求。两者都有活跃社区和丰富扩展,Django学习曲线平缓,Flask更需自定义配置。选择适合自己的框架,开启编程新篇章。
60 0
|
8月前
|
存储 安全 数据库
使用Flask进行小型Web应用开发
【5月更文挑战第31天】本文介绍了使用Python的Flask框架开发小型Web应用的基本步骤和最佳实践。从环境搭建开始,确保安装Python和pip,然后通过`pip install Flask`安装Flask。创建应用涉及初始化Flask实例、定义路由函数处理HTTP请求,如`@app.route(&#39;/&#39;)`。Flask使用Jinja2模板引擎渲染HTML,如`render_template(&#39;about.html&#39;)`。为了集成数据库,可借助Flask扩展如Flask-SQLAlchemy或Flask-MongoEngine。