首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Python-Requests发送带有Django视图的请求

使用Python-Requests发送带有Django视图的请求
EN

Stack Overflow用户
提问于 2020-01-11 20:29:40
回答 1查看 5.4K关注 0票数 4

我正在尝试在我的Django项目上创建一个简单的微服务结构:因此,当某个Django视图被调用时,该视图将向一个包含某些用户数据的Flask微服务发送一个JSON post请求;Flask微服务应该接收该请求,获取该用户的数据,并再次使用Requests向Django返回一些额外的数据,以便我的Django视图可以接收这些数据并执行一些操作,比如将其显示给用户。

现在我只是发送一些虚拟数据,以测试整个系统( Django > request to Flask > Flask > Request to Django)是否工作,但我遇到了一些问题。

为了调试我的代码,我尝试只打印接收到的数据。这是我的观点:

代码语言:javascript
复制
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请求):

代码语言:javascript
复制
@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!"

下面是我的代码的问题所在:

代码语言:javascript
复制
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),结果如下:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-11 21:56:58

您的flask视图可以简化为只返回所需的数据

代码语言:javascript
复制
@app.route("/", methods=["GET","POST"])
def test():
    return {"two": 2}

然后,在向flask发出请求之后,您可以在Django视图中使用数据

代码语言:javascript
复制
response = requests.post('http://127.0.0.1:5000/', json={"one": 1})
print(response.json()) # This should contain the returned data
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59694402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档