python - How to send data from python client to Django web server?
问题描述
I'd like python3 program to send JSON data to Django web server and print them on web page. This is what I have in Views.py:
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')
And the python code:
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
However, it shows this message:
Forbidden (CSRF cookie not set.): /
[28/May/2021 16:51:31] "POST / HTTP/1.1" 403 2864
解决方案
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 装饰器会更好
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')
推荐阅读
- javascript - 无法使用 @kubernetes/client-node 获取集群内的所有作业
- java - 如何使用 Kotlin 和 Retrofit 在 Android 中绕过 HTTPS SSL 证书验证
- python - 无法使用 Python Selenium 在跨度类中定位元素
- bash - 如何比较一个脚本中的多行并在此基础上对该行中的列执行某些操作?在重击中
- android - 在 XML 中包含布局取决于条件
- java - 如何在春季重用.conf文件中的配置值
- python - SWIG c++ 向量类型映射到 python 列表
- dockerode - 如何使用带有 aux 地址的 dockerode 创建 docker 网络
- php - 如何制作多个中继器字段数组的字典?
- swift - CloudKit 没有以正确的顺序保存数据