Flask构建微电影(二)

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

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:[email protected]: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:[email protected]: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("123456"),
        is_super=0,
        role_id=1
    )
    db.session.add(admin)
    db.session.commit()

查看数据库

select * from admin\G;

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

原文地址:https://www.cnblogs.com/derek1184405959/p/9038294.html

时间: 2024-10-03 14:45:17

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

Python Flask构建微信小程序订餐系统

call--->q-2304636824-q 第1章 <Python Flask构建微信小程序订餐系统>课程简介 本章内容会带领大家通览整体架构,功能模块,及学习建议.让大家在一个清晰的开发思路下,进行后续的学习.同时领着大家登陆https://food.54php.cn(使用微信扫码二维码体验下哦横须)一起来演示一下项目.本次课程是严格按照商业系统进行架构开发的,从PC管理员端到小程序会员端,从项目搭建到部署上线,通俗易懂.... 1-1 导学--Python Flask 构建微信小程

二 Flask Project 实战 二

5 templates {{ and }} is an expression{% and %} denotes a control flow statement like if and for blocks defined here that will be overridden in the other templates{% extends 'base.html' %} tells Jinja that this template should replace the blocks from

Docker构建nginx+uwsgi+flask镜像(二)

Dockerfile搭建环境并打包应用 在上一章Docker构建nginx+uwsgi+flask镜像(一)的学习中,我们学会用命令行一句一句在alpine环境中搭建nginx+uwsgi+flask服务,但这体现不了Docker为我们带来的便利,而本章,我们将通过Dockerfile来制作基础镜像和打包应用,因此会有两个Dockerfile文件. 我们先来写第一个Dockerfile文件,这个文件负责搭建运行环境,运行环境需要包括:nginx.uwsgi.Python3: # 配置基础镜像 F

Flask开发微电影网站(二)

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 impor

Flask开发微电影网站(一)

1.用到的Flask知识 1.使用整形,浮点型,路径型,字符串型下正则表达式路由转化器 2.使用GET与POST请求,上传文件,cookie获取与响应,404处理 3.使用模板自动转义,定义过滤器,定义全局上下文处理器,Jinja2语法,包含,继承,定义宏 4.使用flask-wtf定义表单模型,字段类型,字段验证,视图处理表单,模板使用表单 5.使用flask-sqlachemy定义数据库模型,对数据进行增删查改,数据迁移 6.使用蓝图优化项目结构,实现微电影网站前台与后台业务逻辑 7.fla

Flask学习之二——模板

1.Jinja2模板引擎 模板是一个包含响应文本的文件,其中包含用占位变量表示的动态部分,其具体值只在请求的上下文中才能知道.使用真实值替换变量,再返回最终得到的响应字符串,这一过程称为渲染. 默认情况下,Flask 在程序文件夹中的 templates 子文件夹中寻找模板.Flask 提供的 render_template 函数把 Jinja2 模板引擎集成到了程序中.render_template 函数的第一个参数是模板的文件名.随后的参数都是键值对,表示模板中变量对应的真实值. -*- u

Flask 学习(二)路由

Flask  路由 在说明什么是 Flask 路由之前,详细阐述下 Flask “Hello World” 这一 最小应用的代码. Flask “Hello World” 1 from flask import Flask 2 3 app = Flask(__name__) 4 5 @app.route('/') 6 def hello(): 7 return 'Hello World' 8 9 if __name__ = '__main__': 10 app.run() 剖析上述代码: 1.

Flask学习之二 模板

继续学习flask 本部分mega教程的翻译地址:http://www.pythondoc.com/flask-mega-tutorial/templates.html 一.为什么使用模板? 以下做一个小小的扩展:输出一个大标题. 一个容易的选择就是改变我们的视图功能,输出 HTML. 修改app/views.py 1 from app import app 2 3 @app.route('/') 4 @app.route('/index') 5 def index(): 6 user = {

Flask开发微电影网站(五)

后台管理页面是系统管理员登录后对网站进行管理的前端页面 后台登录页面,如下图所示 管理员登录后的页面,如下图所示 管理员登录后,在右上角显示的管理员信息,如下图所示 管理员登录后,在页面中间部分的左侧显示管理菜单 管理菜单包括控制面板,标签管理,电影管理,预告管理,会员管理,评论管理,收藏管理,日志管理,权限管理,角色管理,管理员管理等菜单,每个菜单下有子菜单进行细分管理控制 管理员可以使用菜单对网站进行管理 在上面的图片中,可以看到,后台管理页面的顶部部分都是一样的,所以可以把后台管理页面顶部