学习慕课网课程 Python Flask 构建微电影视频网站 的代码.
-
OS: windows10 pro
-
Python: 3.6.6
-
虚拟化环境: virtualenv
-
代码编辑器: Atom
注意: 在进行此步骤之前请确保
python
已安装.
首先安装virtualenv
: pip install virtualenv
.
然后cd
到你要把虚拟环境保存的目录, 然后执行virtualenv movie --no-site-packages
.
最后执行.\movie\Scripts\activate
激活虚拟环境.(如果是PowerShell的话请参考Windows PowerShell 无法激活 python 虚拟环境问题的解决)
退出虚拟环境命令:
.\movie\Scripts\deactivate.bat
::: tip 工具包安装顺序
- pip list --outdated # 先把该升级的升级
- pip install --upgrade flask
- pip install --upgrade flask-sqlalchemy
- pip install --upgrade PyMySQL
- pip install --upgrade Flask-WTF
- pip install --upgrade Flask-Redis :::
请先执行pip freeze
确保没有输出, 即环境干净, 如果有输出请检查是否是在创建虚拟环境的时候没有使用--no-site-packages
参数.(虚拟环境的删除只要把该目录删除即可)
然后执行pip install flask
安装 Flask.
安装完毕后再次执行pip freeze
可以看到:
(movie) λ pip freeze
click==6.7
Flask==1.0.2
itsdangerous==0.24
Jinja2==2.10
MarkupSafe==1.0
Werkzeug==0.14.1
(movie) λ
project_name
├─manage.py # 入口启动脚本
└─app # 项目APP
├─__init__.py # 初始化文件
├─models.py # 数据模型文件
├─admin # 后台模块
| ├─__init__.py # 初始化脚本
| ├─views.py # 视图处理文件
| └─forms.py # 表单处理文件
├─home # 前台模块
| ├─__init__.py # 初始化脚本
| ├─views.py # 视图处理文件
| └─forms.py # 表单处理文件
├─static # 静态目录
└─templates # 模板文件
├─admin # 后台模板
└─home # 前台模板
一个应用或跨应用中制作应用组件和支持通用的模式.
-
将不同的功能模块化
-
构建大型应用
-
优化项目结构
-
增强可读性, 易于维护
-
首先安装数据库连接依赖包:
pip install flask-sqlalchemy
-
然后安装
MySQL
数据库驱动:pip install PyMySQL
-
定义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)
-
静态文件引入:
{{ url_for('static', filename='文件路径') }}
-
定义路由: {{ url_for('模块名.视图名', 变量=参数) }}
-
定义数据块: {% 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('/comments/')
- 登录日志:
@home.route('/loginlog/')
- 收藏电影:
@home.route('/moviecol/')
@home.route('/')
def inddex():
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')
@app.errorhandler(404)
def page_not_found():
return render_template('common/404.html'), 404
# 登录
@admin.route('/login/')
def login():
return render_template('admin/login.html')
# 退出
@admin.route('/logout/')
def logout():
return render_template('admin/logout.html')
# admin.html
{% block css %}{% endblock %}
{% include 'grid.html' %}
{% block content %}{% endblock %}
{% block js %}{% endblock %}
# 其他页面继承父模板
{% extends 'admin/admin.html' %}
{% block css %}{% endblock %}
{% include 'grid.html' %}
{% block content %}{% endblock %}
{% block js %}{% endblock %}
@admin.route('/')
def index():
return render_template('admin/index.html')
# 添加标签
@admin.route('/tag/add/')
def tag_add():
return render_template('admin/tag_add.html')
# 标签列表
@admin.route('/tag/list/')
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('/auth/add/')
def auth_add():
return render_template('admin/auth_add.html')
# 权限列表
@admin.route('/auth/list/')
def auth_list():
return render_template('admin/auth_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')
- 在
app/__init__.py
中创建db
对象; - 在
app/models.py
中导入db
对象; - 在
app/admin/forms.py
中定义表单验证; - 在
app/templates/admin/login.html
中使用表单字段, 验证信息和消息闪现; - 在
app/admin/views.py
中处理登录请求, 保存会话; - 在
app/admin/views.py
中定义登录装饰器和访问控制.
几个有用的命令:
$ docker pull centos
$ docker run --name mycentos -dti --privileged -p80:80 centos init
$ docker exec -it mycentos /bin/bash # 通过此命令进入centos交互式环境
[root@d005552a43bb /]# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
[root@d005552a43bb /]# vi /etc/yum.repos.d/CentOS-Base.repo
将USTC的源粘贴在这里
[root@d005552a43bb /]# yum makecache
[root@d005552a43bb /]# yum update
[root@d005552a43bb /]# exit
$ docker stop mycentos
$ docker start mycentos
$ docker exec -it mycentos /bin/bash
epel-release
包含了 EPEL 源的 GPG 密钥和软件源信息.
IUS
为 RHEL 和 CentOS 编译单独的包。
# yum install epel-release -y
# yum install https://centos7.iuscommunity.org/ius-release.rpm -y
# yum install python36 -y
# yum install python36u-pip -y
# cp /usr/bin/python36 /usr/bin/python3
# cp /usr/bin/pip3.6 /usr/bin/pip3
# python3 -m pip install --upgrade pip
# pip install --upgrade setuptools
# yum install mariadb-server -y
# systemctl start mariadb.service
# systemctl enable mariadb.service
# mysqladmin -uroot password "密码"
# mysql -uroot -p密码
> create database movie;
> exit
# yum install vim -y
# vim /etc/my.cnf
# 在文件最上面添加
[client]
default-character-set=utf8
# 在[mysqld]下面添加
character-set-server=utf8
# systemctl restart mariadb.service
# yum install nginx -y
# nginx
# yun install net-tools -y
# netstat -anptu | grep nginx
此时在本地浏览器访问localhost即可看到nginx
的欢迎页面(Fedora版).
# yum install redis -y
# vim /etc/redis.conf
将daemonize no改为daemonize yes
# redis-server /etc/redis.conf
# redis-cli shutdown # 使用此命令关闭redis-server
使用如下命令将项目文件夹上传至docker容器内:
$ docker cp -a 项目文件夹路径 容器名称或ID全称:要拷贝到的容器内绝对路径
# pip install --upgrade flask
# pip install --upgrade flask-sqlalchemy
# pip install --upgrade PyMySQL
# pip install --upgrade Flask-WTF
# pip install --upgrade Flask-Redis