簡體   English   中英

使用 Python-Requests 發送帶有 Django 視圖的請求

[英]Send a request with Django view using Python-Requests

我正在嘗試在我的 Django 項目上創建一個簡單的微服務結構:因此,當調用某個 Django 視圖時,該視圖將向包含一些用戶數據的 Flask 微服務發送一個 JSON 發布請求; Flask 微服務應該接收請求,獲取該用戶的數據並再次使用請求將一些額外的數據發送回 Django,以便我的 Django 視圖可以接收該數據並執行一些操作,例如將其顯示給用戶。

現在我只是發送一些虛擬數據,以測試整個系統(Django > request to Flask > Flask > Request to 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 應用程序如何使用 Python-Requests 庫發送數據(一旦它從 Django 視圖接收到 POST 請求):

@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

這里有什么問題:為什么第一個打印語句返回正確的數據,為什么第二個打印不正確? 為什么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

你的燒瓶視圖可以簡化為只返回所需的數據

@app.route("/", methods=["GET","POST"])
def test():
    return {"two": 2}

然后你可以在向flask發出請求后使用Django視圖中的數據

response = requests.post('http://127.0.0.1:5000/', json={"one": 1})
print(response.json()) # This should contain the returned data

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM