引言
以前,学习前端的时候用过nodejs做后端,过后用if...else...
写门路判断写的很臃肿。当初想试试其余语言,就选了python试试水。从nodejs到flask相对是个微小的挑战,尤其是对想我这样很久没有看过js的人来说。之前用的nodejs+react,当初有点看不懂了,感叹年老真好。
选型
python的支流web框架有django,flask,tornado,twisted。。。年老、轻量、顺口,所以我选用flask。对于什么是web框架能够看下图。wsgi
解释一套大家约定的接口标准;wsgi
有很多能够抉择的web framework
就是各个语言本人规定的一套规范,旨在不便开发人员开发业务相干;http server
了解为解决网络协议相干的服务。
看文档的时候,很多web framework
也能提供http server
。不过,他们也说了,大部分用来debug用,不倡议生产上应用
装置
装置flask
我应用了centos 8 stream。应用yum
命令。
yum install flask
装置uWSGI
官网:uwsgi官网
上述地址是uwsgi对于疾速动手python的文档。装置相干节选如下截图:
你很容易看到via pip; pip install uwsgi;
。
那么首先,须要取得
pip
,这意味着咱们须要先装置python
(哈哈哈,当然,咱们搞的就是python的web框架)看一下咱们能装置什么版本
yum list *python*
装置一个能装置的最新的版本
yum install python39
当初,咱们应该能够看到像python3
,python3.9
,pip
等python相干的命令了。但咱们执行
pip install uwsgi
的时候会报错。我忘了截图了。不要慌乱,在一堆红字中,他提醒咱们Exception: you need a C compiler to build uWSGI
装置一个
c compile
yum install gcc
但咱们执行
pip install uwsgi
的时候会报错。我忘了截图了。不要慌乱,在一堆红字中,他提醒咱们fatal error: Python.h: No such file or directory
查看
Python development headers
yum list *python*devel
找一个和python版本对应的版本,装置
Python development headers
yum install python39-devel
- 这些都装置实现后,执行
pip install uwsgi
,应该没有问题了。我装置的时候比拟卡,多执行几次,总能胜利的。
其实,uwsgi
的文档中写了。再回到这张截图,看下高亮的句子“uWSGI is a (big) C application, so you need a C compiler (like gcc or clang) and the Python development headers.”
应用
这部分能够依照下面【装置uWSGI】里的文档撸一下就行了。连贯里往下翻有一节就叫做【Deploying Flask】。就是上面这一段。
而后联合【flask的这篇文档】flask_uwsgi_nginx配置,配置一下nginx。就是上面这一段。
location / { include uwsgi_params; uwsgi_pass 127.0.0.1:3031;}
这样的意思很显著,就是所有的申请到这个 /
门路,通过nginx,都被转到3031端口是那个的服务解决。3031端口起着uwsgi,uwsgi连贯着flask的利用。
咱们看到,上述uwsgi是通过命令行的形式启动的,他在终端会不停的刷新申请的信息。想让他在后盾启动,请参考这篇文档:uwsgi config file。
如下配置文件放入uwsgi.ini
中。后缀.ini
是必须的
其实就是把命令行的参数放到文件中
# uwsgi --socket 127.0.0.1:3031 --wsgi-file flask/index.py --callable app --processes 2 --threads 2 --stats 127.0.0.1:9191[uwsgi]daemonize = uwsgi.logsocket=127.0.0.1:3031stats=127.0.0.1:9191chdir=/xx/xx/xxwsgi-file=%(chdir)/myflask.pycallable=appprocesses=2threads=2master=Truesafe-pidfile=%(chdir)/uwsgi.pid
解释:daemonize
- 示意后盾启动,和日志地位socket
- uwsgi启动的端口stats
- 状态监控服务启动端口chdir
- uwsgi的根目录wsgi-file
- flask文件callable
- 如果要启动flask,必须是appprocesses
,threads
- 要启几个过程几个线程safe-pidfile
- 过程号寄存文件
应用命令启动。就不会在终端输入了。
uwsgi uwsgi.ini
了解
我一开始复读nodejs的代码,我发现,nodejs也会去解决根门路,返回给访问者一个index.html,而后也会去解决其余门路,返回给访问者一个状态或者一些数据。
用同样的思路接触flask,发现如果在nginx的根门路下配置flask,而后在flask里也配置根门路,那就须要在flask中去返回一大串index.html,我没找到咋搞。只有return render_template('index.html', name=name)
像这样。难办,难办那就别办啦!!!
前面想了想,换个思路呢,index.html还是用nginx返回,flask就分心做一些接口得了。
所以试验了一下像这样的nginx配置:
location / { index index.html;}location /xxx/ { include uwsgi_params; uwsgi_pass 127.0.0.1:3031;}
像这样子的flask配置:
from flask import Flaskapp = Flask(__name__)@app.route("/xxx/yyy", methods=['GET', 'POST'])def login(): return "successfully into /xxx/yyy"
像这样子编写前端申请(js):
// 定义申请头login_request.open("POST", "xxx/yyy", true);// 发送页面登陆信息到服务器login_request.send(login_data);event.preventDefault();
后果你猜怎么着,成了!运行齐全如预期。