flask简介

轻量级web应用框架

WSGI工具箱才用Werkzeug

模版引擎则使用Jinja2

Flask使用BSD授权

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

前后台项目目录分析

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

蓝图构建项目目录

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

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

  1. 1.安装数据库连接依赖包
  2. pip install flask-sqlalchemy
  3. 2.定义mysql数据库连接
  4. from flask_sqlalchemy import SQLAlchemy
  5. from flask import Flask
  6. app = Flask(__name__)
  7. app.config['SQLALCHEMY_DATABASE_URI'] = "mysql://root:root@localhost/movie"
  8. app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
  9. db = SQLAlchemy(app)
  10. 定义会员数据模型
  11. class User(db.Model):
  12. __tablename__="user"
  13. id = db.Column(db.Integer,primary_key=True)
  14. name = db.Column(db.String)
  15. pwd = db.Column(db.String)
  16. email = db.Column(db.String)
  17. phone = db.Column(db.String)
  18. info = db.Column(db.Text)
  19. face = db.Column(db.String)
  20. addtime = db.Column(db.DateTime,index=True,default=datetime.utcnow)
  21. uuid = db.Column(db.String)
  22. 定义会员数据模型
  23. id:编号、name:账号、pwd:密码、
  24. email:邮箱、phone:手机号、info:简介、
  25. face:头像、addtime:注册时间、uuid:唯一标志符、comments:评论外键关联、userlogs:会员登录日志外键关联、
  26. moviecols:电影收藏外键关联
  27. 定义会员登录日志数据模型
  28. id:编号
  29. user_id:所属会员编号、
  30. ip:最近登录IP地址、
  31. addtime:最近登录时间
  32. 定义标签数据模型
  33. id:编号
  34. name:标题、
  35. movies:电影外键关联、
  36. addtime:创建时间
  37. 定义电影数据模型
  38. id:编号、title:电影标题、url:电影地址、
  39. info:电影简介、logo:电影封面、star:星级、
  40. playnum:电影播放量、commentnum:电影评论量、tag_id:所有标签、area:地区、release_time:发布时间、length:电影长度、addtime:添加时间、comments:电影评论外键关联、moviecols:电影收藏外键关联
  41. 定义上映预告数据模型
  42. id:编号、
  43. title:上映预告标题、
  44. logo:上映预告封面、
  45. addtime:创建时间
  46. 定义评论数据模型
  47. id:编号、
  48. content:评论内容、
  49. movie_id:所属电影、
  50. user_id:所属用户、
  51. addtime:最近登录时间
  52. 定义收藏电影数据模型
  53. id:编号、
  54. movie_id:所属电影、
  55. user_id:所属用户、
  56. addtime:最近登录时间

权限及角色数据模型设计

  1. 定义权限数据模型
  2. id:编号
  3. name:名称
  4. url:地址
  5. addtime:创建时间
  6. 定义角色数据模型
  7. id:编号、
  8. name:名称、
  9. auths:权限列表、
  10. addtime:创建时间、
  11. admins:管理员外键关联

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

  1. 定义管理员数据模型
  2. id:编号、
  3. name:管理员名称、
  4. pwd:管理员密码
  5. is_super:是否超级管理员
  6. role_id:角色编号、
  7. addtime:创建时间、
  8. adminlogs:管理登录日志外键关联
  9. oplogs:操作日志外键关联
  10. 定义管理员登录日志数据模型
  11. id:编号、
  12. admin_id:所属管理员编号、
  13. ip:最近登录IP地址、
  14. addtime:最近登录时间
  15. 定义操作日志
  16. id:编号、
  17. admin_id:所属管理员编号、
  18. ip:操作IP地址、
  19. reason:操作原因、
  20. addtime:创建时间

搭建前台页面

  1. 前台布局搭建
  2. 1.静态文件引入:{{url_for('static',filename='文件路径')}}
  3. 2.定义路由:{{url_for("模块名.视图名",变量=参数)}}
  4. 3.定义数据块:{% block 数据块名称 %}...{% endblock %}
  5. 会员登录页面搭建
  6. # 登录
  7. @home.route("/login/")
  8. def login():
  9. return render_template("home/login.html")
  10. # 退出
  11. @home.route("/logout/")
  12. def logout():
  13. return redirect(url_for('home.login')
  14. # 注册
  15. @home.route("/register/")
  16. def register():
  17. return render_template("home/register.html")
  18. 会员中心页面搭建
  19. # 会员中心
  20. @home.route("/user/")
  21. # 修改密码
  22. @home.route("/pwd/")
  23. # 评论记录
  24. @home.route("/loginlog/")
  25. # 收藏电影
  26. @home.route("/moviecol/")
  27. 电影列表页面搭建
  28. # 列表
  29. @home.route("/")
  30. def index():
  31. return render_template("home/index.html")
  32. # 动画
  33. @home.route("/animation/")
  34. def animation():
  35. return render_template("home/animation.html")
  36. 电影搜索页面搭建
  37. # 搜索
  38. @home.route("/search/")
  39. def search():
  40. return render_template("home/search.html")
  41. 电影详情页面搭建
  42. @home.route("/play/")
  43. def play():
  44. return render_template("home/play.html")
  45. 404页面搭建
  46. # 404
  47. @app.errorhandler(404)
  48. def page_not_found(error):
  49. return render_template("common/404.html"),404

搭建后台页面

  1. 管理员登录页面搭建
  2. # 登录
  3. @admin.route("/login/")
  4. def login():
  5. return render_template("admin/login.html")
  6. # 退出
  7. @admin.route("/logout/")
  8. def logout():
  9. return redirect(url_for("admin.login")
  10. 后台布局搭建
  11. #admin.html
  12. {% block css %}...{% end %}
  13. {% include "grid.html" %}
  14. {% block content %}...{% end %}
  15. {% block js%}...{% end %}
  16. # 其他页面继承父模版
  17. {% extends "admin/admin.html"%}
  18. {% block css %}...{% end %}
  19. {% include "grid.html" %}
  20. {% block content %}...{% end %}
  21. {% block js%}...{% end %}
  22. #修改密码
  23. @admin.route("/pwd/")
  24. def pwd():
  25. return render_template("admin/pwd.html")
  26. # 系统管理
  27. @admin.route("/")
  28. def index():
  29. return render_template("admin/index.html")

标签管理页面搭建

  1. #编辑标签
  2. @admin.route("/tag/add/")
  3. def tag_add():
  4. return render_template("admin/tag_add.html")
  5. # 标签列表
  6. def tag_list():
  7. return render_template("admin/tag_list.html")

电影管理页面搭建

  1. # 编辑电影
  2. @admin.route("/movie/add/")
  3. def movie_add():
  4. return render_template("admin/movie_add.html")
  5. # 电影列表
  6. @admin.route("/movie/list/")
  7. def movie_list():
  8. return render_template("admin/movie_list.html")

上映预告管理页面搭建

  1. #编辑上映预告
  2. @admin.route("/preview/add/")
  3. def preview_add():
  4. return render_template("admin/preview_add.html")
  5. # 上映预告列表
  6. @admin.route("preview/list/")
  7. def preview_list():
  8. return render_template("admin/preview_list.html")

会员管理页面搭建

  1. #会员列表
  2. @admin.route("/user/list/")
  3. def user_list():
  4. return render_template("admin/user-list.html")
  5. #查看会员
  6. @admin.route("/user/view/")
  7. def user_view():
  8. return render_template("admin/user_view.html")

评论管理页面搭建

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

收藏管理页面搭建

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

操作日志管理页面搭建

  1. # 操作日志列表
  2. @admin.route('/oplog/list/')
  3. def oplog_list():
  4. return render_template("admin/oplog_list.html")
  5. # 管理员日志列表
  6. @admin.route("/adminloginlog/list/")
  7. def adminloginlog_list():
  8. return render_template("admin/adminloginlog_list.html")
  9. # 会员日志列表
  10. @admin.route("/userloginlog/list")
  11. def userloginlog_list():
  12. return render_template("admin/userloginlog_list.html")

角色管理页面搭建

  1. #添加角色
  2. @admin.route('/role/add/')
  3. def role_add():
  4. return render_template("admin/role_add.html")
  5. #角色列表
  6. @admin.route('/role/list/')
  7. def role_list():
  8. return render_template("admin/role_list.html")

管理员管理页面搭建

  1. # 添加管理员
  2. @admin.route('/admin/add/')
  3. def admin_add():
  4. return render_template("admin/admin_add.html")
  5. # 管理员列表
  6. @admin.route('/admin/list/')
  7. def admin_list():
  8. return render_template("admin/admin_list.html")
  9. 管理员登录
  10. 1.app/__init__.py中创建db对象
  11. 2.app/models.py中导入db对象
  12. 3.app/admin/forms.py中定义表单验证
  13. 4.app/templates/admin/login.html中使用表单字段、信息验证、消息闪现
  14. 5.app/admin/views.py中处理登录请求、保持会话
  15. 6.app/admin/views.py定义登录装饰器、访问控制
  16. 1.模型:Admin
  17. 2.表单:LoginForm
  18. 3.请求方法:GETPOST
  19. 4.访问控制:无
  20. 标签管理
  21. 1.模型:Tag
  22. 2.表单:TagForm
  23. 3.请求方法:GETPOST
  24. 4.访问控制:@admin_login_req
  25. 电影管理
  26. 1.模型:Movie
  27. 2.表单:MovieForm
  28. 3.请求方法:GETPOST
  29. 4.访问控制:@admin_login_req
  30. 预告管理
  31. 1.模型:Preview
  32. 2.表单:PreviewForm
  33. 3.请求方法:GETPOST
  34. 4.访问控制:@admin_login_req
  35. 会员管理
  36. 1.模型:User
  37. 2.表单:无
  38. 3.请求方法:GETPOST
  39. 4.请求控制:@admin_login_req
  40. 评论管理
  41. 1.模型:Comment
  42. 2.表单:无
  43. 3.请求方法:GET
  44. 4.访问控制:@admin_login_req
  45. 修改密码
  46. 1.模型:Admin
  47. 2.表单:PwdForm
  48. 3.请求方法:GETPOST
  49. 4.访问控制:@admin_login_req
  50. 日志管理
  51. 1.模型:OplogUserlogAdminlog
  52. 2.表单:无
  53. 3.请求方法:GET
  54. 4.访问控制:@admin_login_req

基于角色的访问控制

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

访问权限控制

  1. #定义权限装饰器
  2. def admin_auth(f):
  3. @wraps(f)
  4. def decorate_function(*args,**kwargs):
  5. #权限查询
  6. abort(404)
  7. return decorate_function
  8. #调用权限装饰器
  9. @admin_auth
  10. 会员注册
  11. 1.模型:User
  12. 2.表单:RegisterForm
  13. 3.请求方法:GETPOST

服务器部署:

  1. cat /etc/redhat-release
  2. cat /proc/cpuinfo
  3. free -m
  4. df -h
  5. yum -y install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel
  6. wget -c https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tgz
  7. tar -zxf Python-3.6.1.tgz
  8. ./configure --prefix=/usr/local
  9. yum -y install gcc gcc-c++
  10. ./configure --prefix=/usr/local
  11. make altinstall
  12. ls /usr/local/bin/
  13. cd /usr/bin/
  14. mv python python.backup
  15. ln -s /usr/local/bin/python3.6 /usr/bin/python
  16. ln -s /usr/local/bin/python3.6 /usr/bin/python3
  17. cd /usr/bin/
  18. ls yum*
  19. vim yum
  20. yum -y install mariadb-server
  21. systemctl start mariadb.service
  22. systemctl enable mariadb.service
  23. vim /etc/my.cnf
  24. character-set-server=utf8
  25. systemctl restart mariadb.service
  26. wget http://nginx.org/download/nginx-1.12.0.tar.gz
  27. yum -y install gcc gcc-c++ openssl-devel pcre-devel httpd-tools
  28. tar -zxf nginx-1.12.0.tar.gz
  29. cd nginx-1.12.0
  30. ls
  31. useradd nginx
  32. ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_mp4_module --with-http_flv_module
  33. make && make install
  34. ln -s /usr/local/nginx/sbin/nginx /usr/sbin/
  35. cd ~
  36. nginx
  37. netstat -anptu | grep nginx
  38. req.txt
  39. click==6.7
  40. Flask==0.12.2
  41. Flask-Script==2.0.5
  42. Flask-SQLAlchemy==2.2
  43. Flask-WTF==0.14.2
  44. itsdangerous==0.24
  45. jinja2==2.9.6
  46. MarkupSafe==1.0
  47. PyMySQL==0.7.11
  48. Werkzeug==0.12.2
  49. WTForms==2.1
  50. pip install -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com -r req.txt
  51. cp -r movie /usr/local/nginx/html
  52. 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. I don't Blame You that You don't Understand Me

    I don't Blame You that You don't Understand Me Every one has a dead corner in himself, with no entry ...

  2. 049 模块6-wordcloud库的使用

    目录 一.wordcloud库基本介绍 1.1 wordcloud库概述 1.2 wordcloud库的安装 二.wordcloud库使用说明 2.1 wordcloud库基本使用 2.2 wordc ...

  3. springboot的Interceptor、Filter、Listener及注册

    springboot拦截器: public class Interceptor implements HandlerInterceptor{ private Logger logger = Logge ...

  4. Spring Cloud官方文档中文版-声明式Rest客户端:Feign

    官方文档地址为:http://cloud.spring.io/spring-cloud-static/Dalston.SR2/#spring-cloud-feign 文中例子我做了一些测试在:http ...

  5. FreeSql (三十五)CodeFirst 自定义特性

    比如项目内已经使用了其它 orm,如 efcore,这样意味着实体中可能存在 [Key],但它与 FreeSql [Column(IsPrimary = true] 不同. Q: FreeSql 实体 ...

  6. NOIP2006 1.明明的随机数

    题目:明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不 ...

  7. iOS面试题整理带答案

    iOS面试题整理带答案       找工作,面试是避免不了的! 而技术开发面试,问一些技术相关的问题是必须的,最新的技术可能人人都趋之若鹜,但有些原理和基础的也希望都有了解. 这里整理了一些iOS相关 ...

  8. Escape (BFS + 模拟)

    Problem Description The students of the HEU are maneuvering for their military training. The red arm ...

  9. HttpClient远程接口调用-实名认证

    1.HttpClient远程接口调用 1)用户注册 注册按钮button提交表单时,要return false form表单 <!-- action="http://localhost ...

  10. 24 (OC)* 加密

    一 .MD5加密 MD5加密是最常用的加密方法之一,是从一段字符串中通过相应特征生成一段32位的数字字母混合码. MD5主要特点是 不可逆,相同数据的MD5值肯定一样,不同数据的MD5值不一样(也不是 ...