django-rest-framework JSON POST,request.data throws在读取请求的数据流后无法访问body

时间:2017-09-10 16:50:25

标签: python json django django-rest-framework visual-studio-code

我想使用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"
            ]
        },

0 个答案:

没有答案
相关问题