Как сделать POST простой JSON, используя Django REST Framework? Маркер CSRF отсутствует или неверен

Был бы признателен, если бы кто-то показал мне, как сделать простой запрос POST, используя JSON с каркасом DEST Django. Я не вижу никаких примеров этого в учебнике нигде?

Вот мой объект Ролевая модель, которую я хотел бы разместить. Это будет совершенно новая роль, которую я хотел бы добавить в базу данных, но я получаю ошибку 500.

{
    "name": "Manager", 
    "description": "someone who manages"
}

Вот мой запрос curl в командной строке bash:

curl -X POST -H "Content-Type: application/json" -d '[
{
    "name": "Manager", 
    "description": "someone who manages"
}]'


http://localhost:8000/lakesShoreProperties/role

URL

http://localhost:8000/lakesShoreProperties/roles

Работает с запросом GET, и я могу снять все роли в базе данных, но я не могу создать какие-либо новые роли. У меня нет установленных разрешений. Я использую стандартное представление в views.py

class RoleDetail(generics.RetrieveUpdateDestroyAPIView):
    queryset = Role.objects.all()
    serializer_class = RoleSerializer
    format = None

class RoleList(generics.ListCreateAPIView): 
        queryset = Role.objects.all()
        serializer_class = RoleSerializer
        format = None

И по моемуurls.py для этого приложения соответствующие отображения URL-адресов являются правильными:

url(r'^roles/

Сообщение об ошибке:

{
    "detail": "CSRF Failed: CSRF token missing or incorrect."
}

Что здесь происходит, и как это исправить? Является ли localhost межсайтовым запросом? я добавил@csrf_exempt вRoleDetail а такжеRoleList но это, похоже, ничего не меняет. Может ли этот декоратор быть добавлен в класс, или его нужно добавить в метод? Добавление@csrf_exempt украсить, моя ошибка становится:

Request Method: POST
Request URL:    http://127.0.0.1:8000/lakeshoreProperties/roles/
Django Version: 1.5.1
Exception Type: AttributeError
Exception Value:    
'function' object has no attribute 'as_view'

Затем я отключил CSRF во всем приложении и теперь получаю следующее сообщение:

{"non_field_errors": ["Недопустимые данные"]}, когда мой JSON-объект, который я знаю, является допустимым json. Это ошибка не поля, но я застрял прямо здесь.

Что ж, получается, что мой JSON был недействительным?

{
    "name": "admin", 
    "description": "someone who administrates"
}

против

[
    {
        "name": "admin",
        "description": "someone who administrates"
    }
]

Наличие квадратных скобок [] приводит к сбою запроса POST. Но используя валидатор jsonlint.com, оба моих объекта json проверяются.

Обновить: Проблема была в отправке POST с PostMan, а не в бэкэнд. Видетьhttps://stackoverflow.com/a/17508420/203312

, views.RoleList.as_view()), url(r'^role/(?P<pk>[0-9]+)/

Сообщение об ошибке:

{
    "detail": "CSRF Failed: CSRF token missing or incorrect."
}

Что здесь происходит, и как это исправить? Является ли localhost межсайтовым запросом? я добавил@csrf_exempt вRoleDetail а такжеRoleList но это, похоже, ничего не меняет. Может ли этот декоратор быть добавлен в класс, или его нужно добавить в метод? Добавление@csrf_exempt украсить, моя ошибка становится:

Request Method: POST
Request URL:    http://127.0.0.1:8000/lakeshoreProperties/roles/
Django Version: 1.5.1
Exception Type: AttributeError
Exception Value:    
'function' object has no attribute 'as_view'

Затем я отключил CSRF во всем приложении и теперь получаю следующее сообщение:

{"non_field_errors": ["Недопустимые данные"]}, когда мой JSON-объект, который я знаю, является допустимым json. Это ошибка не поля, но я застрял прямо здесь.

Что ж, получается, что мой JSON был недействительным?

{
    "name": "admin", 
    "description": "someone who administrates"
}

против

[
    {
        "name": "admin",
        "description": "someone who administrates"
    }
]

Наличие квадратных скобок [] приводит к сбою запроса POST. Но используя валидатор jsonlint.com, оба моих объекта json проверяются.

Обновить: Проблема была в отправке POST с PostMan, а не в бэкэнд. Видетьhttps://stackoverflow.com/a/17508420/203312

, views.RoleDetail.as_view()),

Сообщение об ошибке:

{
    "detail": "CSRF Failed: CSRF token missing or incorrect."
}

Что здесь происходит, и как это исправить? Является ли localhost межсайтовым запросом? я добавил@csrf_exempt вRoleDetail а такжеRoleList но это, похоже, ничего не меняет. Может ли этот декоратор быть добавлен в класс, или его нужно добавить в метод? Добавление@csrf_exempt украсить, моя ошибка становится:

Request Method: POST
Request URL:    http://127.0.0.1:8000/lakeshoreProperties/roles/
Django Version: 1.5.1
Exception Type: AttributeError
Exception Value:    
'function' object has no attribute 'as_view'

Затем я отключил CSRF во всем приложении и теперь получаю следующее сообщение:

{"non_field_errors": ["Недопустимые данные"]}, когда мой JSON-объект, который я знаю, является допустимым json. Это ошибка не поля, но я застрял прямо здесь.

Что ж, получается, что мой JSON был недействительным?

{
    "name": "admin", 
    "description": "someone who administrates"
}

против

[
    {
        "name": "admin",
        "description": "someone who administrates"
    }
]

Наличие квадратных скобок [] приводит к сбою запроса POST. Но используя валидатор jsonlint.com, оба моих объекта json проверяются.

Обновить: Проблема была в отправке POST с PostMan, а не в бэкэнд. Видетьhttps://stackoverflow.com/a/17508420/203312

Ответы на вопрос(8)

Ваш ответ на вопрос