flask简介

轻量级web应用框架

WSGI工具箱才用Werkzeug

模版引擎则使用Jinja2

Flask使用BSD授权

1.virtualenv的使用
(1)创建虚拟环境:virtualenv venv
(2) 激活虚拟环境:source venv/bin/activate
(3) 退出虚拟环境: deactivate
2.flask的安装
(1)安装前检测:pip freeze
(2) 安装flask:pip install flask
(3) 安装后检测:pip freeze

前后台项目目录分析

manage.py       入口启动脚本
app 项目APP
__init__.py 初始化文件
models.py 数据模型文件
static 静态目录
home/admin 前台/后台模块
__init__.py 初始化脚本
views.py 视图处理文件
forms.py 表单处理文件
templates 模版目录
home/admin 前台/后台模版

蓝图构建项目目录

1.什么是蓝图?
一个应用中或跨应用制作应用组件和支持通用的模式
2.蓝图的作用?
将不同的功能模块化
构建大型应用
优化项目结构
增强可读性,易于维护
1.定义蓝图(app/admin/__init__.py)
from flask import Blueprint
admin = Blueprint("admin",__name__)
import views
2.注册蓝图(app/__init__.py)
from admin import admin as admin_blueprint
app.register_blueprint(admin_blueprint,url_prefix="/admin")
3.调用蓝图(app/admin/views.py)
from . import admin
@admin.route("/")

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

1.安装数据库连接依赖包
pip install flask-sqlalchemy
2.定义mysql数据库连接
from flask_sqlalchemy import SQLAlchemy
from flask import Flask app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = "mysql://root:root@localhost/movie"
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
db = SQLAlchemy(app) 定义会员数据模型
class User(db.Model):
__tablename__="user"
id = db.Column(db.Integer,primary_key=True)
name = db.Column(db.String)
pwd = db.Column(db.String)
email = db.Column(db.String)
phone = db.Column(db.String)
info = db.Column(db.Text)
face = db.Column(db.String)
addtime = db.Column(db.DateTime,index=True,default=datetime.utcnow)
uuid = db.Column(db.String) 定义会员数据模型
id:编号、name:账号、pwd:密码、
email:邮箱、phone:手机号、info:简介、
face:头像、addtime:注册时间、uuid:唯一标志符、comments:评论外键关联、userlogs:会员登录日志外键关联、
moviecols:电影收藏外键关联 定义会员登录日志数据模型
id:编号
user_id:所属会员编号、
ip:最近登录IP地址、
addtime:最近登录时间 定义标签数据模型
id:编号
name:标题、
movies:电影外键关联、
addtime:创建时间 定义电影数据模型
id:编号、title:电影标题、url:电影地址、
info:电影简介、logo:电影封面、star:星级、
playnum:电影播放量、commentnum:电影评论量、tag_id:所有标签、area:地区、release_time:发布时间、length:电影长度、addtime:添加时间、comments:电影评论外键关联、moviecols:电影收藏外键关联 定义上映预告数据模型
id:编号、
title:上映预告标题、
logo:上映预告封面、
addtime:创建时间 定义评论数据模型
id:编号、
content:评论内容、
movie_id:所属电影、
user_id:所属用户、
addtime:最近登录时间 定义收藏电影数据模型
id:编号、
movie_id:所属电影、
user_id:所属用户、
addtime:最近登录时间

权限及角色数据模型设计

定义权限数据模型
id:编号
name:名称
url:地址
addtime:创建时间 定义角色数据模型
id:编号、
name:名称、
auths:权限列表、
addtime:创建时间、
admins:管理员外键关联

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

定义管理员数据模型
id:编号、
name:管理员名称、
pwd:管理员密码
is_super:是否超级管理员
role_id:角色编号、
addtime:创建时间、
adminlogs:管理登录日志外键关联
oplogs:操作日志外键关联 定义管理员登录日志数据模型
id:编号、
admin_id:所属管理员编号、
ip:最近登录IP地址、
addtime:最近登录时间 定义操作日志
id:编号、
admin_id:所属管理员编号、
ip:操作IP地址、
reason:操作原因、
addtime:创建时间

搭建前台页面

前台布局搭建
1.静态文件引入:{{url_for('static',filename='文件路径')}}
2.定义路由:{{url_for("模块名.视图名",变量=参数)}}
3.定义数据块:{% block 数据块名称 %}...{% endblock %} 会员登录页面搭建
# 登录
@home.route("/login/")
def login():
return render_template("home/login.html") # 退出
@home.route("/logout/")
def logout():
return redirect(url_for('home.login') # 注册
@home.route("/register/")
def register():
return render_template("home/register.html") 会员中心页面搭建
# 会员中心
@home.route("/user/")
# 修改密码
@home.route("/pwd/")
# 评论记录
@home.route("/loginlog/")
# 收藏电影
@home.route("/moviecol/") 电影列表页面搭建
# 列表
@home.route("/")
def index():
return render_template("home/index.html")
# 动画
@home.route("/animation/")
def animation():
return render_template("home/animation.html") 电影搜索页面搭建
# 搜索
@home.route("/search/")
def search():
return render_template("home/search.html") 电影详情页面搭建
@home.route("/play/")
def play():
return render_template("home/play.html") 404页面搭建
# 404
@app.errorhandler(404)
def page_not_found(error):
return render_template("common/404.html"),404

搭建后台页面

管理员登录页面搭建
# 登录
@admin.route("/login/")
def login():
return render_template("admin/login.html")
# 退出
@admin.route("/logout/")
def logout():
return redirect(url_for("admin.login") 后台布局搭建
#admin.html
{% block css %}...{% end %}
{% include "grid.html" %}
{% block content %}...{% end %}
{% block js%}...{% end %} # 其他页面继承父模版
{% extends "admin/admin.html"%}
{% block css %}...{% end %}
{% include "grid.html" %}
{% block content %}...{% end %}
{% block js%}...{% end %} #修改密码
@admin.route("/pwd/")
def pwd():
return render_template("admin/pwd.html")
# 系统管理
@admin.route("/")
def index():
return render_template("admin/index.html")

标签管理页面搭建

#编辑标签
@admin.route("/tag/add/")
def tag_add():
return render_template("admin/tag_add.html")
# 标签列表
def tag_list():
return render_template("admin/tag_list.html")

电影管理页面搭建

# 编辑电影
@admin.route("/movie/add/")
def movie_add():
return render_template("admin/movie_add.html")
# 电影列表
@admin.route("/movie/list/")
def movie_list():
return render_template("admin/movie_list.html")

上映预告管理页面搭建

#编辑上映预告
@admin.route("/preview/add/")
def preview_add():
return render_template("admin/preview_add.html") # 上映预告列表
@admin.route("preview/list/")
def preview_list():
return render_template("admin/preview_list.html")

会员管理页面搭建

#会员列表
@admin.route("/user/list/")
def user_list():
return render_template("admin/user-list.html")
#查看会员
@admin.route("/user/view/")
def user_view():
return render_template("admin/user_view.html")

评论管理页面搭建

# 评论列表
@admin.route("/comment/list/")
def comment_list():
return render_template("admin/comment_list.html")

收藏管理页面搭建

# 收藏列表
@admin.route('/moviecol/list/')
def moviecol_list():
return render_template("admin/moviecol_list.html")

操作日志管理页面搭建

# 操作日志列表
@admin.route('/oplog/list/')
def oplog_list():
return render_template("admin/oplog_list.html")
# 管理员日志列表
@admin.route("/adminloginlog/list/")
def adminloginlog_list():
return render_template("admin/adminloginlog_list.html")
# 会员日志列表
@admin.route("/userloginlog/list")
def userloginlog_list():
return render_template("admin/userloginlog_list.html")

角色管理页面搭建

#添加角色
@admin.route('/role/add/')
def role_add():
return render_template("admin/role_add.html") #角色列表
@admin.route('/role/list/')
def role_list():
return render_template("admin/role_list.html")

管理员管理页面搭建

# 添加管理员
@admin.route('/admin/add/')
def admin_add():
return render_template("admin/admin_add.html")
# 管理员列表
@admin.route('/admin/list/')
def admin_list():
return render_template("admin/admin_list.html")
管理员登录
1.app/__init__.py中创建db对象
2.app/models.py中导入db对象
3.app/admin/forms.py中定义表单验证
4.app/templates/admin/login.html中使用表单字段、信息验证、消息闪现
5.app/admin/views.py中处理登录请求、保持会话
6.app/admin/views.py定义登录装饰器、访问控制 1.模型:Admin
2.表单:LoginForm
3.请求方法:GET、POST
4.访问控制:无 标签管理
1.模型:Tag
2.表单:TagForm
3.请求方法:GET、POST
4.访问控制:@admin_login_req 电影管理
1.模型:Movie
2.表单:MovieForm
3.请求方法:GET、POST
4.访问控制:@admin_login_req 预告管理
1.模型:Preview
2.表单:PreviewForm
3.请求方法:GET、POST
4.访问控制:@admin_login_req 会员管理
1.模型:User
2.表单:无
3.请求方法:GET、POST
4.请求控制:@admin_login_req 评论管理
1.模型:Comment
2.表单:无
3.请求方法:GET
4.访问控制:@admin_login_req 修改密码
1.模型:Admin
2.表单:PwdForm
3.请求方法:GET、POST
4.访问控制:@admin_login_req 日志管理
1.模型:Oplog、Userlog、Adminlog
2.表单:无
3.请求方法:GET
4.访问控制:@admin_login_req

基于角色的访问控制

权限管理
1.模型:Auth
2.表单:AuthForm
3.请求方法:GET、POST
4.访问控制:@admin_login_req

访问权限控制

#定义权限装饰器
def admin_auth(f):
@wraps(f)
def decorate_function(*args,**kwargs):
#权限查询
abort(404)
return decorate_function
#调用权限装饰器
@admin_auth 会员注册
1.模型:User
2.表单:RegisterForm
3.请求方法:GET、POST

服务器部署:

cat /etc/redhat-release

cat /proc/cpuinfo

free -m

df -h

yum -y install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel

wget -c https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tgz

tar -zxf Python-3.6.1.tgz 

./configure --prefix=/usr/local

yum -y install gcc gcc-c++

./configure --prefix=/usr/local

make altinstall

ls /usr/local/bin/

cd /usr/bin/

mv python python.backup

ln -s /usr/local/bin/python3.6 /usr/bin/python

ln -s /usr/local/bin/python3.6 /usr/bin/python3

cd /usr/bin/

ls yum*

vim yum

yum -y install mariadb-server

systemctl start mariadb.service
systemctl enable mariadb.service vim /etc/my.cnf
character-set-server=utf8
systemctl restart mariadb.service wget http://nginx.org/download/nginx-1.12.0.tar.gz yum -y install gcc gcc-c++ openssl-devel pcre-devel httpd-tools tar -zxf nginx-1.12.0.tar.gz
cd nginx-1.12.0
ls
useradd nginx
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_mp4_module --with-http_flv_module
make && make install
ln -s /usr/local/nginx/sbin/nginx /usr/sbin/ cd ~
nginx
netstat -anptu | grep nginx req.txt
click==6.7
Flask==0.12.2
Flask-Script==2.0.5
Flask-SQLAlchemy==2.2
Flask-WTF==0.14.2
itsdangerous==0.24
jinja2==2.9.6
MarkupSafe==1.0
PyMySQL==0.7.11
Werkzeug==0.12.2
WTForms==2.1 pip install -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com -r req.txt cp -r movie /usr/local/nginx/html vim /usr/local/nginx/conf/nginx.conf

work_processes 4;

events {

worker_connections 262140

}

http {

include mime.types;

default_type application/octet-stream;

sendfile on;

keepalive_timeout 65;

limit_conn_zone \(binary_remote_addr zone=addr:5m;
upstream movie {
service 127.0.0.1:5001;
service 127.0.0.1:5002;
service 127.0.0.1:5003;
service 127.0.0.1:5004;
}
server {
listen 80;
server_name localhost;
location / {
root html
index index.html index.htm;
proxy_pass http://movie;
}
location ~ \.flv\) {

flv;

limit_conn addr 1;

limit_rate 1024k;

rewrite ^/static/uploads/(.+?).flv$ /movie/app/static/uploads/\(1.flv permanent;
}
location ~ \.mp4\) {

mp4;

limit_conn addr 1;

limit_rate 1024k;

rewrite ^/static/uploads/(.+?).mp4$ /movie/app/static/uploads/$1.mp4 permanent;

}

error_page 500 502 503 504/50x.html;

location = /50x.html{

root html;

}

}

}

from app import create_app

application = create_app('production')

if name == 'main':

application.run()

flask 微电影网站的更多相关文章

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

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

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

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

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

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

  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.安装数据库连接依赖包 pip install flask-sqlalchemy 2.创建movie数据库 在CentOS虚拟机,进入MaridDB数据库提示符,创建movie数据库 create ...

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

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

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

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

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

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

随机推荐

  1. c语言文件的基本操作

    c语言对文件的操作主要分为:按字符操作,按行操作,按内存块操作 主要的函数: fopen(): FILE * fopen(_In_z_ const char * _Filename, _In_z_ c ...

  2. Windows7关闭默认共享

    注意:禁用默认共享会导致安装ORACLE时执行先决条件检测不通过,要想安装ORACLE得先打开共享. 1.win+r 运行里输入compmgmt.msc进入计算机管理,在共享文件夹里,去掉所有的盘共享 ...

  3. Nginx的架构及工作流程

    NGINX是一个免费的,开源的,高性能的HTTP服务器和反向代理,以及IMAP / POP3代理服务器.NGINX以其高性能,稳定性,丰富的功能集,简单的配置和低资源消耗而闻名,也是为解决C10K问题 ...

  4. 用button 属性来保存字符串地址

    我用到for循环创建button  通过点击不同的按钮拿到每个button对应的链接地址,因为button的个数也是通过后台数据返回.上代码: //保存到数组 _array = [Article mj ...

  5. C++11新增容器以及元组

    上次说了C++11的部分新特性,这里我们来说说新增的容器. unordered_map unordered_set unordered_multimap unordered_multiset arra ...

  6. Java中创建对象的5种方法

    将会列举5种方法去创建 Java 对象,以及他们如何与构造函数交互,并且会有介绍如何去使用这些方法的示例. 作为一个 Java 开发人员,我们每天都会创建大量的 Java 对象,但是我们通常会使用依赖 ...

  7. 【linux】【FastDFS】FastDFS安装

    前言 FastDFS是一个开源的轻量级分布式文件系统,由跟踪服务器(tracker server).存储服务器(storage server)和客户端(client)三个部分组成,主要解决了海量数据存 ...

  8. 首次GitHub千星项目提交维护成功 留念

    现在有点激动,可能有混乱的地方.请大家见谅. 一直觉得千星项目,对我来说是一个遥不可及的地方.没想到第一次在GitHub上 提交Pull Request 就成功了,并且是一个千星项目. 虽然 只是提出 ...

  9. python,json解析字符串时ValueError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)

    今天写测试工具的时候,去excel取数据,用json解析字符串为字典时报错,后经调试,发现是单引号的原因,将单引号换位双引号即可 def getExcelValue_to_dic(filepath): ...

  10. Python连载40-协程定义及状态、send语句、yield用法

    一.协程 1.历史进程: (1)3.4引入协程,用yield来实现 (2)3.5引入协程语法 (3)实现协程比较好的包有asyncio,tornado,gevent 2.定义:协程是为非抢占式多任务产 ...