python:Flask中request对象的简单用法

因为在工作中需要将写好的Python程序改写成API接口供其他部门使用,所以这篇博客重点利用Flask的请求对象完成数据传输,对于更深层次的理论方面的内容,以后再补充;
本文只涉及本地服务器,再远程服务器上的部署也不涉及。本文使用的Flask及Python版本信息如下:
Flask:1.1.2
Python:3.8.8

1. Flask包

  Flask是一个轻量级的可定制框架,使用Python语言编写,较其他同类型框架更为灵活、轻便、安全且容易上手。从一个最简单的例子入手:

from flask import Flask
app = Flask(__name__) #该语句用于创建一个Web应用的实例
@app.route('/') #定义路由规则
def index():
    return 'Hello World'
if __name__ == '__main__':
    app.run(debug=True)

在Anaconda中运行之后,在浏览器中打开:http://127.0.0.1:5000 就可以看到运行结果。如下:
在这里插入图片描述

2.Flask请求对象Request
2.1 GET模式
from flask import Flask,request
import json
app=Flask(__name__)
@app.route('/test_1',methods=['GET'])
def check():
    return_dict={'statusCode':200,'message':'successful','result':False}
    name=request.args.get('name') #
    age=request.args.get('age')
    return_dict['result']=tt(name,age)
    return json.dumps(return_dict,ensure_ascii=False)#ensure_ascii设置为False时能显示中文
def tt(name,age):
    result_str='{}今年{}岁'.format(name,age)
    return result_str
if __name__=='__main__':
    app.run(debug=True)

运行上述代码,运行成功输出如下代码:

 * Serving Flask app "server" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: on
 * Restarting with windowsapi reloader

在浏览器中输入如下网址:http://127.0.0.1:5000/test_1?name=小明&age=20(注意虽然name是字符串类型,但在这种写法里不需要加引号),其具体执行结果如下:
在这里插入图片描述

2.2 POST模式

  网上很多资料上都说这种模式下需要安装Postman才能调试,但是我这里并没有安装Postman,就直接用Anaconda来调试了。POST模式下需要写两个代码文件:
server.py

from flask import Flask,request
import json

app=Flask(__name__)
@app.route('/test_1',methods=['POST'])
def check():
    return_dict={'statusCode':200,'message':'successful','result':False}
    if not request.get_json():
        return json.dumps(return_dict,ensure_ascii=False)
    name=request.get_json()['name']
    age=request.get_json()['age']
    result=tt(name,age)
    return_dict['result']=result
    return json.dumps(return_dict,ensure_ascii=False)

def tt(name,age):
    result_str='{}今年{}岁'.format(name,age)
    return result_str

if __name__=='__main__':
    app.run(debug=True)

此时再Anaconda的spyder中运行该文件,具体结果如下(这说明server端已经正常启动了):
在这里插入图片描述
再写一个test.py文件,具体如下:

import requests
if __name__=="__main__":
    testData={'name':'小明','age':12}
    r=requests.post('http://127.0.0.1:5000/test_1',json=testData)
    print(r.json())

再Anaconda中重新打开一个console,执行该test.py文件。就可以直接看到返回的结果:
在这里插入图片描述
因为这里没有使用Postman这种可视化的方式,所以在代码调试的时候可能有点麻烦。若程序没有正确执行想要查看报错信息的时候,可以在console中输入如下命令进行查看:
在这里插入图片描述

3.遇到的问题

(1)ConnectionError异常。具体报错信息

ConnectionError: HTTPConnectionPool(host=‘localhaost’, port=5000): Max retries exceeded with url: /test_1 (Caused by NewConnectionError(’<urllib3.connection.HTTPConnection object at 0x000001D008A10070>: Failed to establish a new connection: [Errno 11001] getaddrinfo failed’))
遇到这个问题可能是因为代码里使用了localhost,将localhost改成具体的http://127.0.0.1:5000就可以了(如果修改过端口号,这里就不能用5000了).
(2) 要注意GET和POST模式下取数方式的不同。

参考资料
  1. 百度百科:Flask
  2. https://www.jianshu.com/p/6452596c4edb
  3. https://blog.csdn.net/xxn_723911/article/details/90293421
  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值