首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将数据从python客户端发送到Django web服务器?

如何将数据从python客户端发送到Django web服务器?
EN

Stack Overflow用户
提问于 2021-05-29 00:53:01
回答 2查看 21关注 0票数 0

我想python3程序发送JSON数据到Django网络服务器,并打印在网页上。这是我在Views.py中所拥有的:

代码语言:javascript
运行
复制
def receive_json(request):
    if request.method == 'POST':
        received_data = json.loads(request.body.decode("utf-8"))
        return StreamingHttpResponse('it was post request: ' + str(received_data))
    return StreamingHttpResponse('it was get request')

和python代码:

代码语言:javascript
运行
复制
import requests
import json
url = "http://127.0.0.1:8000/"
data = {"data": [{'key1':'val1'}, {'key2':'val2'}]}
headers = {'content-type':'application/json'}
r = requests.post(url, data=json.dumps(data), headers=headers)
r.text

但是,它显示以下消息:

代码语言:javascript
运行
复制
Forbidden (CSRF cookie not set.): /
[28/May/2021 16:51:31] "POST / HTTP/1.1" 403 2864
EN

回答 2

Stack Overflow用户

发布于 2021-05-29 01:02:15

代码语言:javascript
运行
复制
import requests
import json
url = "http://127.0.0.1:8000/"
data = {"data": [{'key1':'val1'}, {'key2':'val2'}]}
headers = {'content-type':'application/json','Cookie':'csrftoken=axXsa39e5hq8gqlTjJFHAbUWtg2FQgnSd3cxxkx9khatqgersthtSryDxtF0cVCk'}
r = requests.post(url, data=json.dumps(data), headers=headers)
r.text

我认为可以通过添加Cookie来实现这些功能,但是如果您通过以下方式在receive_json函数中使用@csrf_exempt装饰器会更好

代码语言:javascript
运行
复制
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
def receive_json(request):
    if request.method == 'POST':
        received_data = json.loads(request.body.decode("utf-8"))
        return StreamingHttpResponse('it was post request: ' + str(received_data))
    return StreamingHttpResponse('it was get request')
票数 0
EN

Stack Overflow用户

发布于 2021-05-29 01:18:37

本质上,您首先需要执行GET请求来获取csrftoken,然后将其与数据一起post。有几种方法可以做到这一点。这里有一个(但未经过测试):

代码语言:javascript
运行
复制
import requests
import json
url = "http://127.0.0.1:8000/"


s = requests.Session()
s.get(url)
headers = {
  'content-type':'application/json',
  'X-CSRFToken': s.cookies["csrftoken"],
}
data = {"data": [{'key1':'val1'}, {'key2':'val2'}]}
r = s.post(url, data=json.dumps(data), headers=headers)
r.text

你可以在Django's CSRF documentation上找到更多信息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67742823

复制
相关文章

相似问题

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