Когда flask_server.py
запущено:
from flask import Flask, request, Response
import logging
logging.basicConfig(level=logging.DEBUG,
format='%(levelname)s-%(message)s')
app = Flask(__name__)
@app.route('/test', methods=['GET','POST'])
def route():
logging.info('get_json: %s : %s' % (request.get_json(), type(request.get_json())))
logging.info('files: %s : %s' % (request.files, type(request.files)))
return Response()
if __name__ == '__main__':
app.run('0.0.0.0', 5000)
отправьте http request
, используя метод requests.post
, предоставив ему Python dictionary
в качестве аргумента json
:
import json, requests
dictionary = {"file": {"url": "https://bootstrap.pypa.io/get-pip.py"}}
response = requests.post("http://127.0.0.1:5000/test", json=dictionary)
* 1011Сервер Flask регистрирует, что он получает словарь методом
Flask.request.get_json
:
root - INFO - get_json: {u'file': {u'url': u'https://bootstrap.pypa.io/get-pip.py'}} : <type 'dict'>
root - INFO - files: ImmutableMultiDict([]) : <class 'werkzeug.datastructures.ImmutableMultiDict'>
Опять же, с помощью аргумента requests.post
метода files
отправьте объект открытого файла.Сервер Flask получит его через атрибут Flask.request.files
:
files = {'key_1': open('/any_file.txt', 'rb')}
response = requests.post(url, files = files)
Журналы сервера Flask:
root - INFO - get_json: None : <type 'NoneType'>
root - INFO - files: ImmutableMultiDict([('file_slot_1', <FileStorage: u'any_file.txt' (None)>)]) : <class 'werkzeug.datastructures.ImmutableMultiDict'>
Наконец, отправьте оба объекта: dictionary
и open file
, используя один и тот же requests.post
метод:
response = requests.post("http://127.0.0.1:5000/test",
json=dictionary,
files=files)
Сервер регистрирует, что он получает файл, но не получает словарь json
.
Можно ли отправить request
с несколькимиаргументы данных: такие как 'json' и 'files'?