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
先后台项目目录分析css
manage.py 入口启动脚本 app 项目APP __init__.py 初始化文件 models.py 数据模型文件 static 静态目录 home/admin 前台/后台模块 __init__.py 初始化脚本 views.py 视图处理文件 forms.py 表单处理文件 templates 模版目录 home/admin 前台/后台模版
蓝图构建项目目录html
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("/")
会员及会员登陆日志数据模型设计python
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")
标签管理页面搭建mysql
#编辑标签 @admin.route("/tag/add/") def tag_add(): return render_template("admin/tag_add.html") # 标签列表 def tag_list(): return render_template("admin/tag_list.html")
电影管理页面搭建nginx
# 编辑电影 @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")
上映预告管理页面搭建c++
#编辑上映预告 @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")
会员管理页面搭建web
#会员列表 @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")
评论管理页面搭建sql
# 评论列表 @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")
操做日志管理页面搭建flask
# 操做日志列表 @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()