一 、前言
在技术选型上,可以选择Flask框架,应该还可以选择另一个Django.但是我不会哎=.=
连Python Flask 都是因为工作中的一个需求需要,才去接触到的.
关于编辑工具用的是VSCode,本人就一枚菜鸟小前端.
一个简单的实现方案,给大家参考一下吧...
二 、安装Flask
pip3 install flask
安装完就能通过pip3 list查看到
三 、一个最简单的案例
3.1 案例长酱紫
# 导包 创建实例
from flask import Flask, request
app = Flask(__name__)
# 定义路由
@app.route('/queryTest', methods=['GET', 'POST'])
def queryDataList():
# 通过request.json 获取传参
params = request.json
# 假设传参格式定义为这样,前端调用时传name和age两个参数
# {
# name:"xxxx",
# age:18
# }
# 通过params.get 分别获取 接收到的 name和 age 并且打印
paramName = params.get('name')
paramAge = params.get('age')
print("接收到的参数-name:", paramName)
print("接收到的参数-age:", paramAge)
# 这边就可以根据获取到的参数,调用python函数进行逻辑处理等等
# 将结果封装,实际开发中可以将 这部分内容放至上一步 处理数据的时候封装
# 在这边 显示效果为 将前端传过来的参数,略微封装一下(也可不封装),直接返回
res = {
"params": params
}
return res
if __name__ == "__main__":
app.run(port=1111, host="127.0.0.1", debug=True)
# 这边设置 端口, ip 等等
3.2 、让最简单的案例跑起来
在控制台 输入
python ./main.py
#关于这个python 还是 python3,我本地用的是python 部署到服务器上用的是python3 应该都可以吧=.=
这样就暂时可以了.
关于这个警告:WARNING: This is a development server. Do not use it in a production deployment.
我们先不管,晚点再来看这个~
3.3 、调用
关于调用,我们就用postman来调用API
如图所示:
API: http://127.0.0.1:1111/queryTest
请求参数:
{
"name":"不吃鱼的傻猫",
"age":18
}
返回的数据:
{
"params": {
"age": 18,
"name": "不吃鱼的傻猫"
}
}
控制台也能正常打印数据.
3.4 完结?撒花不...
如上所示,好像我们看上去就已经达到目的...实现了JavaScript与Python函数间的交互.但是不撒花...还有一些小问题不是...
四 、 一些补充
4.1 WSGI
4.1.1 WARNING: This is a development server. Do not use it in a production deployment.
翻译一下就是:这是一个开发服务器。 不要在生产部署中使用它。写的项目总是要部署到生产环境的.所以这个警告我们也还是解决一下吧
解决办法控制台也有说.Use a production WSGI server instead.
我先show一下我的实现吧
4.1.2 实现
1、引入 gevent
pip/pip3 install gevent
2、修改代码
from flask import Flask, request
from gevent import pywsgi # 新增引包
app = Flask(__name__)
# 定义路由
@app.route('/queryTest', methods=['GET', 'POST'])
def queryDataList():
# 通过request.json 获取传参
params = request.json
# 假设传参格式定义为这样,前端调用时传name和age两个参数
# {
# name:"xxxx",
# age:18
# }
# 通过params.get 分别获取 接收到的 name和 age 并且打印
paramName = params.get('name')
paramAge = params.get('age')
print("接收到的参数-name:", paramName)
print("接收到的参数-age:", paramAge)
#
# 这边就可以根据获取到的参数,调用python函数进行逻辑处理等等
#
# 将结果封装,实际开发中可以将 这部分内容放至上一步 处理数据的时候封装
# 在这边 显示效果为 将前端传过来的参数,略微封装一下(也可不封装),直接返回
res = {
"params": params
}
return res
# 这边设置 端口, ip 等等
if __name__ == "__main__":
# app.run(port=1111, host="127.0.0.1", debug=True)
server = pywsgi.WSGIServer(('127.0.0.1', 1111), app)
server.serve_forever()
3、启动
启动之后就没有之前那么多东西了。看上去好像没发生啥。
4、再次调用
5、这个就OK啦~
关于WSGI,涉及的知识,实现的方案有好多好多。。。。我就不补充了(其实我也没法补充,因为暂时我也不会更多的了==!)
4.2 跨域
这个问题, 在实际开发中,也容易碰到。尤其是一个项目中,调用的API,既有Java的,又有Python的时候。同一个域名下,不同端口。
4.2.1 准备工作-引库
pip install flask-cors
4.2.2 配置
flask-cors 有两种用法,一种为全局使用,一种对指定的路由使用
1、 使用 CORS函数 配置全局路由
from flask import Flask, request
from flask_cors import CORS
app = Flask(__name__)
CORS(app, supports_credentials=True)
2、 使用 @cross_origin 来配置单行路由
from flask import Flask, request
from flask_cors import cross_origin
@app.route('/queryTest', methods=['GET', 'POST'])
@cross_origin(supports_credentials=True)
def queryDataList():
# 通过request.json 获取传参
params = request.json
4.3 部署
再简单聊聊部署中可能会碰到的一些问题吧.
启进程的时候,有没有将之前的那个kill掉了呢?
端口,防火墙开了吗?
关于服务器上安装Python环境的,可以看下我之前的一篇文章:踩坑小结:Linux安装python环境 、安装OpenSSL
后言
本人就一枚python的菜鸟小白,如果文章中有什么问题,希望能不吝指教~多谢!