使用os模块来获取当前文件的绝对路径和拼接路径。 import os BASE_DIR = ospathdirname(__file__) #获取当前文件夹的绝对路径 print BASE_DIR file_path = ospathjoin(BASE_DIR, 'Test_Data') #获取当前文件夹内的Test_Data文件 Test_Data
首先,安装Flask
pip install flask
阅读这篇文章之前我假设你已经了解RESTful API的相关概念,如果不清楚,可以阅读我之前写的这篇博客[Designing a RESTful Web API
Flask是一个使用Python开发的基于Werkzeug的Web框架。
Flask非常适合于开发RESTful API,因为它具有以下特点:
使用Python进行开发,Python简洁易懂
容易上手
灵活
可以部署到不同的环境
支持RESTful请求分发
我一般是用curl命令进行测试,除此之外,还可以使用Chrome浏览器的postman扩展。
资源
首先,我创建一个完整的应用,支持响应/, /articles以及/article/:id。
from flask import Flask, url_for
app = Flask(__name__)
@approute('/')
def api_root():
return 'Welcome'
@approute('/articles')
def api_articles():
return 'List of ' + url_for('api_articles')
@approute('/articles/<articleid>')
def api_article(articleid):
return 'You are reading ' + articleid
if __name__ == '__main__':
apprun()
可以使用curl命令发送请求:
响应结果分别如下所示:
GET /
Welcome
GET /articles
List of /articles
GET /articles/123
You are reading 123
路由中还可以使用类型定义:
@approute('/articles/<articleid>')
上面的路由可以替换成下面的例子:
@approute('/articles/<int:articleid>')
@approute('/articles/<float:articleid>')
@approute('/articles/<path:articleid>')
默认的类型为字符串。
请求
请求参数
假设需要响应一个/hello请求,使用get方法,并传递参数name
from flask import request
@approute('/hello')
def api_hello():
if 'name' in requestargs:
return 'Hello ' + requestargs['name']
else:
return 'Hello John Doe'
服务器会返回如下响应信息:
GET /hello
Hello John Doe
GET /helloname=Luis
Hello Luis
请求方法
Flask支持不同的请求方法:
@approute('/echo', methods = ['GET', 'POST', 'PATCH', 'PUT', 'DELETE'])
def api_echo():
if requestmethod == 'GET':
return "ECHO: GET\n"
elif requestmethod == 'POST':
return "ECHO: POST\n"
elif requestmethod == 'PATCH':
return "ECHO: PACTH\n"
elif requestmethod == 'PUT':
return "ECHO: PUT\n"
elif requestmethod == 'DELETE':
return "ECHO: DELETE"
可以使用如下命令进行测试:
curl -X PATCH :5000/echo
不同请求方法的响应如下:
GET /echo
ECHO: GET
POST /ECHO
ECHO: POST
请求数据和请求头
通常使用POST方法和PATCH方法的时候,都会发送附加的数据,这些数据的格式可能如下:普通文本(plain text), JSON,XML,二进制文件或者用户自定义格式。
Flask中使用requestheaders类字典对象来获取请求头信息,使用requestdata 获取请求数据,如果发送类型是application/json,则可以使用requestget_json()来获取JSON数据。
from flask import json
@approute('/messages', methods = ['POST'])
def api_message():
if requestheaders['Content-Type'] == 'text/plain':
return "Text Message: " + requestdata
elif requestheaders['Content-Type'] == 'application/json':
return "JSON Message: " + jsondumps(requestjson)
elif requestheaders['Content-Type'] == 'application/octet-stream':
f = open('/binary', 'wb')
fwrite(requestdata)
fclose()
return "Binary message written!"
else:
return "415 Unsupported Media Type ;)"
使用如下命令指定请求数据类型进行测试:
curl -H "Content-type: application/json" \
-X POST :5000/messages -d '{"message":"Hello Data"}'
使用下面的curl命令来发送一个文件:
curl -H "Content-type: application/octet-stream" \
-X POST :5000/messages --data-binary @messagebin
不同数据类型的响应结果如下所示:
POST /messages {"message": "Hello Data"}
Content-type: application/json
JSON Message: {"message": "Hello Data"}
POST /message <messagebin>
Content-type: application/octet-stream
Binary message written!
注意Flask可以通过requestfiles获取上传的文件,curl可以使用-F选项模拟上传文件的过程。
响应
Flask使用Response类处理响应。
from flask import Response
@approute('/hello', methods = ['GET'])
def api_hello():
data = {
'hello' : 'world',
'number' : 3
}
js = jsondumps(data)
resp = Response(js, status=200, mimetype='application/json')
respheaders['Link'] = '>
以上就是关于如何获取Flask 应用程序的根路径全部的内容,包括:如何获取Flask 应用程序的根路径、如何用 flask 优雅的实现 restful api、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)