仕事で Responderを使うことになったのでQuick Startをやった。
合間に自分用のメモを書きつつ実装したので、メモがてら残しておく。
Responder導入
前の記事 でPoetryを導入しているので、下記コマンドを実行して導入した。
$ poetry add responder
実装
import responder
api = responder.API()
@api.route("/")
def hello_world(req, resp):
resp.text = "hello, world!"
@api.route("/hello/{who}")
def hello_to(req, resp, *, who):
resp.text = f"hello, {who}!"
@api.route("/hello/{who}/json")
def hello_to(req, resp, *, who):
resp.media = {"hello": who}
@api.route("/hello/{who}/html")
def hello_html(req, resp, *, who):
resp.html = api.template('hello.html', who=who)
@api.route("/416")
def teapot(req, resp):
resp.status_code = api.status_codes.HTTP_416
@api.route("/pizza")
def pizza_pizza(req, resp):
resp.headers['X-Pizza'] = '42'
@api.route("/incoming")
async def receive_incoming(req, resp):
@api.background.task
def process_data(data):
f = open('./{}'.format(data['file']['filename']), 'w')
f.write(data['file']['content'].decode('utf-8'))
f.close()
data = await req.media(format='files')
process_data(data)
resp.media = {'success': True}
if __name__ == '__main__':
api.run()
最後の Receiving Data & Background Tasks
は、サンプルコードを /incoming
に向くように変更して動作確認をした。
import requests
data = {'file': ('hello.txt', 'hello, world!', "text/plain")}
r = requests.post('http://127.0.0.1:5042/incoming', files=data)
print(r.text)