项目结构
目录结构
blog/ # 项目根目录
manage.py # 启动控制代码
requirements.txt # 依赖包类表文件
migrations/ # 数据库迁移目录
tests/ # 测试模块目录
app/ # 整个程序目录
templates/ # 模板文件目录
common/ # 通用模板
email/ # 邮件模板
。。。
static/ # 静态文件目录
img/
css/
js/
favicon.ico
views/ # 蓝本文件目录
models.py # 数据模型文件
forms.py # 表单类文件
settings.py # 配置文件
extensions.py # 扩展文件(存放所有扩展)
email.py # 邮件发送功能函数
__init__.py # 包文件
项目准备
- 根据目录结构,创建相关目录及文件
- 书写配置文件(就是书写各种环境的配置类)
- 使用工厂方法创建应用实例,并初始化配置
- 添加各种扩展(顺便粘贴邮件发送函数)
- 配置蓝本(添加各种蓝本文件,并注册)
用户登录退出(flask-login)
-
说明:flask-login是一个专门用来管理用户登录退出的扩展库
-
安装:
pip install flask-login
-
使用:
# 第一步:添加扩展 from flask_login import LoginManager login_manager = LoginManager() def config_extensions(app): ... login_manager.init_app(app) # 设置登录端点 login_manager.login_view = 'user.login' # 设置登录信息 login_manager.login_message = '请先登录,然后才能访问' # 第二步:继承自UserMixin类(也可以自己实现相关方法) from flask_login import UserMixin class User(UserMixin, db.Model): ... # 第三步:实现回调 @login_manager.user_loader def load_user(uid): return User.query.get(uid)
-
总结
状态切换: login_user # 可以提供记住我的功能 logout_user # 退出登录 状态查询: is_authenticated 登录状态 is_anonymous 匿名状态 路由保护: login_required # 保护需要登录才能访问的路由 当前用户: current_user # 哪里都可以使用,在模板中不需要分配
项目部署
nginx服务器
-
安装:
sudo apt install nginx
-
说明:简单使用nginx
-
添加虚拟主机:
- 在
/etc/nginx/sites-available
下创建虚拟主机配置文件www.bbs.com
,内容如下:
server { listen 80; server_name www.bbs.com bbs.com; location / { root /var/www/blog; index index.html; } }
- 创建软链接:在sites-enabled下创建
sudo ln -s /etc/nginx/sites-available/www.bbs.com /etc/nginx/sites-enabled/www.bbs.com
- 重启nginx服务
- 创建目录:
/var/www/bbs
- 在
/var/www/bbs
下创建文件index.html
- 添加本地域名解析(劫持),修改配置文件:
/etc/hosts
,在末尾添加:
127.0.0.1 www.bbs.com 127.0.0.1 bbs.com
- 在
Flask项目
- 说明:将flask项目拷贝到
/var/www/bbs
目录下
uWSGI
-
说明:uWSGI是实现了WSGI协议的应用程序。
-
安装:
pip3 install uwsgi
-
配置:
http # 以http协议启动 socket # 以socket方式启动 chdir # uwsgi启动的项目的根目录 wsgi-file # 数据交给哪个模块处理 callable # 具体可调用的对象 daemonize # 后台运行(需要指定一个日志文件) processes # 指定使用的进程数 threads # 指定使用的线程数
-
启动演示(以http协议启动)
uwsgi --http 127.0.0.1:5000 --wsgi-file manage.py --callable app
-
socket方式启动
- 需要nginx转发请求
server { listen 80; server_name www.bbs.com bbs.com; location / { # 包含请求参数 include uwsgi_params; # 以socket方式转发请求 uwsgi_pass 127.0.0.1:5000; } }
一定不要忘记重新启动nginx。
- 启动uwsgi
uwsgi --socket 127.0.0.1:5000 --wsgi-file manage.py --callable app
- 将启动参数写入配置文件
uwsgi.ini
[uwsgi] socket = 127.0.0.1:5000 wsgi-file = manage.py callable = app # 后台启动 daemonize = ~/log/uwsgi.log
启动:uwsgi uwsgi.ini
静态资源处理
-
说明:静态文件的请求没有必要转发,因为nginx自己就可以处理。所以我们想要重写转发规则。
-
静态资源的路由转发规则:
location /static { root /var/www/bbs; # 或 alias /var/www/bbs/static; }
-
测试准备
- 在项目目录下创建
static
文件夹 - 拷贝一张图片
gyy.jpeg
到static
目录
- 在项目目录下创建
-
测试:看到图片表示OK
www.bbs.com/static/gyy.jpeg
上线步骤:
1.在线上服务器安装虚拟开发环境
2.将开发环境中依赖包require.txt中的所有依赖在虚拟开发环境中安装一遍
pip install -r require.txt
3.在虚拟开发环境中安装uwsgi
pip install uwsgi
4.将自己的项目拷贝到站点根目录
- 创建配置文件,将启动参数写入配置文件
uwsgi.ini
[uwsgi]
socket = 127.0.0.1:5000
wsgi-file = manage.py
callable = app
# 后台启动
daemonize = ~/log/uwsgi.log
- 启动uwsgi (在虚拟开发环境中)
uwsgi uwsgi.ini
ps -aux|grep uwsgi 查看是否启动
- 配置虚拟站点
cd /etc/nginx/sites-avaiable/
#以default为模板创建配置文件
sudo cp default www.1904.com
server {
listen 80;
root /data/www/1904;
server_name www.1904.com;
location / {
# 配置uwsgi
include uwsgi_params;
uwsgi_pass 127.0.0.1:5050;
}
# 静态文件请求处理
location /static {
alias /data/www/1904/static;
}
}
cd /etc/nginx/sites-enable/
sudo ln -s ../sites-avaiable/www.1904.com www.1904.com
#重启nginx
sudo service nginx restart
6 把项目中使用数据库备份出来,拷贝到服务器上,在服务器重建数据库,然后把数据恢复到数据库中