栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

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

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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(’: Failed to establish a new connection: [Errno 11001] getaddrinfo failed’))
遇到这个问题可能是因为代码里使用了localhost,将localhost改成具体的http://127.0.0.1:5000就可以了(如果修改过端口号,这里就不能用5000了).

参考资料
  1. 百度百科:Flask
  2. https://www.jianshu.com/p/6452596c4edb
  3. https://blog.csdn.net/xxn_723911/article/details/90293421
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/530206.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号