我想使用Django-REST-Framework和python 3.6来构建REST api,但面临POST请求的问题
我可以使用postman将json数据成功发送到内容类型设置为“application / json”的端点,并通过执行request.data
将其读作dict。如果我通过运行
python manage.py runserver
但是,当我在Visual Studio Code上进行调试时,Django的标准HttpRequest对象不会被django-rest-framework的增强Request对象覆盖并引发RawPostDataException("You cannot access body after reading from request's data stream")
views.py
@csrf_exempt
@api_view(['GET', 'POST'])
@parser_classes((JSONParser,))
def customers(request):
received_data = request.data
settings.py
中定义的中间件MIDDLEWARE = [
'corsheaders.middleware.CorsMiddleware',
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
settings.py
中已安装的应用INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django_mysql',
'api',
'installer',
'rest_framework',
'rest_framework.authtoken',
'corsheaders',
'django_celery_beat',
]
VS代码的launch.json
{
"name": "Django",
"type": "python",
"request": "launch",
"stopOnEntry": false,
"pythonPath": "/Users/bharath/miniconda3/envs/shopify/bin/python",
"program": "${workspaceRoot}/backend/manage.py",
"cwd": "${workspaceRoot}/backend",
"args": [
"runserver",
"--noreload",
"--nothreading",
"--no-color"
],
"env": {},
"envFile": "${workspaceRoot}/.env",
"debugOptions": [
"WaitOnAbnormalExit",
"WaitOnNormalExit",
"RedirectOutput",
"DjangoDebugging"
]
},