Я пытаюсь создать простую структуру микросервиса в моем проекте Django: поэтому при вызове определенного представления Django это представление будет отправлять запрос JSON post в микросервис Flask, содержащий пользователя данные; микросервис Flask должен получить запрос, принять данные этого пользователя и отправить обратно в Django некоторые дополнительные данные, снова используя запросы, чтобы мое представление Django могло получать эти данные и выполнять некоторые операции, например показывать их user.
Сейчас я просто отправляю несколько фиктивных данных, чтобы проверить, работает ли вся эта система (Django> запрос к Flask> Flask> Запрос к Django), но я У меня возникли некоторые проблемы.
Чтобы отладить мой код, я пытаюсь просто напечатать полученные данные. Вот мое представление:
def myView(request):
mydict = {}
# The request is sent to my external Python script..
req = requests.post('http://127.0.0.1:5000/', json={"one": 1}) # Some dummy data
# .. Once the external script sends back a request with data, this should handle it
if request.method == 'POST':
# The data is inside this variable
data = request.POST
for key in data.items():
if float(key[1]) > 0:
mydict.update({key[0]: key[1]})
print(mydict) #FIRST PRINT STATEMENT
print(mydict) #SECOND PRINT STATEMENT
response = HttpResponse(get_token(request))
return JsonResponse(mydict) #RETURNS "{}"
А вот как мое приложение Flask отправляет данные (как только оно получает запрос POST из представления Django), используя библиотеку Python -Requests:
@app.route("/", methods=["GET","POST"])
def test():
# After the request from the VIEW is received, a request containing some random json data
# is sent to Django
url = 'http://127.0.0.1:8000/myView/'
client = requests.session()
# We need to get the CSRF token, in order for the request to be taken by Django
csrftoken = requests.get(url).cookies['csrftoken']
data = {"two": 2}
header = {'X-CSRFToken': csrftoken}
cookies = {'csrftoken': csrftoken}
resp = requests.post(url, data=data, headers=header, cookies=cookies)
# Let's seend the request to Django
return f"Test!"
Вот что не так с моим кодом:
METHOD: POST
{'two': 2}
[10/Jan/2020 10:41:37] "POST /myView/ HTTP/1.1" 200 320
{}
[10/Jan/2020 10:41:37] "GET /myView/ HTTP/1.1" 200 2
Вот что не так: почему первый оператор print возвращает правильные данные, а второй - нет? И почему return JsonResponse
возвращает пустой словарь?
Я попытался добавить print('METHOD: ', request.method)
в первые строки представления, вот что произошло:
METHOD: GET
METHOD: GET
[10/Jan/2020 10:46:22] "GET /myView/ HTTP/1.1" 200 2
METHOD: POST
[10/Jan/2020 10:46:26] "POST /myView/ HTTP/1.1" 200 320
[10/Jan/2020 10:46:26] "GET /myView/ HTTP/1.1" 200 2