flask 微电影网站
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 微电影网站的更多相关文章
- Flask开发微电影网站(一)
1.用到的Flask知识 1.使用整形,浮点型,路径型,字符串型下正则表达式路由转化器 2.使用GET与POST请求,上传文件,cookie获取与响应,404处理 3.使用模板自动转义,定义过滤器,定 ...
- Flask开发微电影网站(五)
后台管理页面是系统管理员登录后对网站进行管理的前端页面 后台登录页面,如下图所示 管理员登录后的页面,如下图所示 管理员登录后,在右上角显示的管理员信息,如下图所示 管理员登录后,在页面中间部分的左侧 ...
- Flask开发微电影网站(三)
页面完成后的最终布局 可以看到,页面共同的部分是顶部导航和底部导航 所以我们可以把页面顶部导航和底部导航部分单独定义一个文件home.html,然后让需要使用顶部导航和底部导航的页面都继承home.h ...
- Flask开发微电影网站(七)
1.后台管理之电影管理 1.1 定义电影表单 在app的admin目录的forms.py文件中,定义电影表单 # 电影表单 class MovieForm(FlaskForm): title = St ...
- Flask开发微电影网站(六)
1. 后台管理登录功能实现 1.1 后台管理页面登录表单LoginForm 在app的admin目录下创建forms.py文件,用来保存admin蓝图中需要使用到的表单 from flask_wtf ...
- Flask开发微电影网站(二)
1.安装数据库连接依赖包 pip install flask-sqlalchemy 2.创建movie数据库 在CentOS虚拟机,进入MaridDB数据库提示符,创建movie数据库 create ...
- Flask开发微电影网站(十)
1.后台管理之角色管理 1.1 角色管理之定义角色表单 在app的admin目录的forms.py文件中,定义角色表单 # 角色表单 class RoleForm(FlaskForm): name = ...
- Flask开发微电影网站(九)
1.后台管理之电影管理 1.1 电影管理之所有电影收藏列表 1.1.1 电影管理之电影收藏列表视图函数 在admin目录下的views.py文件中定义电影收藏列表视图函数 电影收藏列表视图函数需要被登 ...
- Flask开发微电影网站(八)
1.后台管理之电影预告管理 1.1 定义电影预告表单 在app的admin目录的forms.py文件中,定义电影预告表单 # 预告表单 class PreviewForm(FlaskForm): ti ...
随机推荐
- virtualbox下给centos7固定ip
在virtualbox桥接连接模式下,固定虚拟机的ip. 修改/etc/sysconfig/network-scripts/ifcfg-ens33文件 添加如下信息: 保存 重启网卡: sudo se ...
- jumper-server-部署官网版
本文链接:https://www.cnblogs.com/wwtao/p/11491574.html 官网链接: https://jumpserver.readthedocs.io/zh/master ...
- Hive函数大全-完整版
现在虽然有很多SQL ON Hadoop的解决方案,像Spark SQL.Impala.Presto等等,但就目前来看,在基于Hadoop的大数据分析平台.数据仓库中,Hive仍然是不可替代的角色.尽 ...
- 近日让很多人议论纷纭的P++,PHP新分支?
最近大家可能有看到一个新的名词——P++. 很巧这个词来源于不久前从 Zend 公司离职的 Zeev Suraski 以 PHP 开发组成员的身份提议要创建 PHP 方言,暂命名为 P++. 老兄最近 ...
- Spring Boot 入门之单元测试篇(五)
博客地址:http://www.moonxy.com 一.前言 JUnit 是一个由 Java 语言编写的开源的回归测试(回归测试是指重复以前全部或部分的相同测试)框架,由Erich Gamma 和 ...
- Navicat Premium 连oralce报错:oracle library is not loaded
我装的Navicat Premium是64位的,计算机也是64位的,故在oracle网上下了一个64位的instantclient-basic-windows.x64-11.2.0.4.0.zip 地 ...
- Python语法基础之DataFrame
转载自https://blog.csdn.net/lijinlon/article/details/81676859 Python数据分析首先需要进行数据清洗处理,涉及到很多DataFrame和Ser ...
- kubernetes实战(二十六):kubeadm 安装 高可用 k8s v1.16.x dashboard 2.x
1.基本配置 基本配置.内核升级.基本服务安装参考https://www.cnblogs.com/dukuan/p/10278637.html,或者参考<再也不踩坑的Kubernetes实战指南 ...
- RxSwift 入门
ReactiveX 是一个库,用于通过使用可观察序列来编写异步的.基于事件的程序. 它扩展了观察者模式以支持数据.事件序列,并添加了允许你以声明方式组合序列的操作符,同时抽象对低层线程.同步.线程安全 ...
- 4.7 if else-if
c#中的if else-if if else-if 中最后的"else":如果用户输入的不等于上面的else if(xxx)表达式,则输出这行代码. **不参与运算的数值不用转换 ...