引言

以前,学习前端的时候用过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;

  1. 那么首先,须要取得pip,这意味着咱们须要先装置python(哈哈哈,当然,咱们搞的就是python的web框架)

    看一下咱们能装置什么版本

    yum list *python*

    装置一个能装置的最新的版本

    yum install python39



    当初,咱们应该能够看到像python3python3.9pip等python相干的命令了。

  2. 但咱们执行pip install uwsgi的时候会报错。我忘了截图了。不要慌乱,在一堆红字中,他提醒咱们Exception: you need a C compiler to build uWSGI

    装置一个c compile

    yum install gcc
  3. 但咱们执行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
  4. 这些都装置实现后,执行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,必须是app
processesthreads - 要启几个过程几个线程
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();

后果你猜怎么着,成了!运行齐全如预期。