743567274 发表于 2022-11-10 10:35

记一次Python写API接口的笔记

之前一直用易语言开发API接口。突发奇想,准备使用python进行一次API的开发!
首先准备工作
打开百度,搜索,按照代码注释自己理解开始抄!
import flask #导入自带的web服务
from flask import request #导入自带的web服务中的request

server = flask.Flask(__name__)

@server.route('/list/project',methods = ['get'])#创建路径为/list/project的get接口
def Projectlist():
    proj = request.values.get('project')#获取get接口的参数project保存在proj中
    name = request.values.get('name')#获取get接口的参数name保存在name中
    project = { #准备构造返回的json
      "msg":"ok",
      "status":200,
      "data":{
            "project":proj,
            "name":name
      }
    }
    return project#把构造的json格式返回

@server.route('/',methods = ['POST'])#创建根路径的post接口
def post():
    name = request.stream.read() #额,这里其实是不想写了,只是想测试一下,就直接把请求体返回回去!
    return name
if __name__ == '__main__':
    server.run(host='127.0.0.1',port=80,debug=True) #创建一个本地服务

打包后发现了一个错误
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
中文翻译:警告:这是一个开发服务器。不要在生产部署中使用它。请使用生产WSGI服务器。


百度,查找问题。经过修改后的代码


import flask #导入自带的web服务
from flask import request #导入自带的web服务中的request
from gevent import pywsgi #导入第三方的web服务

server = flask.Flask(__name__)

@server.route('/list/project',methods = ['get'])#创建路径为/list/project的get接口
def Projectlist():
    proj = request.values.get('project')#获取get接口的参数project保存在proj中
    name = request.values.get('name')#获取get接口的参数name保存在name中
    project = { #准备构造返回的json
      "msg":"ok",
      "status":200,
      "data":{
            "project":proj,
            "name":name
      }
    }
    return project#把构造的json格式返回

@server.route('/',methods = ['POST'])#创建根路径的post接口
def post():
    name = request.stream.read()   #额,这里其实是不想写了,只是想测试一下,就直接把请求体返回回去!
    return name
if __name__ == '__main__':
    app = pywsgi.WSGIServer(('127.0.0.1',80),server)#创建一个本地服务
    app.serve_forever()#启动这个服务


其他相关笔记
#如果想创建其他接口,methods接口可以多选:methods = ['POST','GET'...]

choujie1689 发表于 2022-11-11 14:53

ly765893958 发表于 2022-11-11 13:00
那个怎么写查询参数呢,我在教程里没看到

@app03.get('/query')
async def pagelimit(page: int, limit: Optional = None):
    if limit:
      return {"page":page,"limit":limit}
    return {"page":page}

像上面这样,查询参数定义在函数内def pagelimit(page: int, limit: Optional = None):,路由只定义路由@app03.get('/query')

xuanmuluck 发表于 2022-11-10 15:46

chinalys 发表于 2022-11-10 15:44
网络验证等等

你这不是本机吗?

choujie1689 发表于 2022-11-10 10:39

学习了,不过感觉还是fastapi好用

743567274 发表于 2022-11-10 11:00

15820394839 发表于 2022-11-10 10:39
学习了,不过感觉还是fastapi好用

感谢大哥!搜索了一下,感觉确实方便强大了不少。学的越多,就感觉知道的越少!

lizy169 发表于 2022-11-10 12:05

学习了,谢谢大神

fengwolf3 发表于 2022-11-10 12:59

收藏学习,感谢分享

zhybest 发表于 2022-11-10 14:01

还是很厉害的

raykeyor 发表于 2022-11-10 14:35

赞赞赞。。。

ly765893958 发表于 2022-11-10 15:05

15820394839 发表于 2022-11-10 10:39
学习了,不过感觉还是fastapi好用

研究了一下部署确实很方便环境一安装简单两句代码就实现了helloword的接口但是对于稍稍复杂一点的才疏学浅 有点看不懂教程的语法{:301_995:}

xuanmuluck 发表于 2022-11-10 15:07

我是很好奇,这实现了啥功能呢?

chinalys 发表于 2022-11-10 15:44

xuanmuluck 发表于 2022-11-10 15:07
我是很好奇,这实现了啥功能呢?

网络验证等等
页: [1] 2 3
查看完整版本: 记一次Python写API接口的笔记