Поражаю, кто-то покажет мне, как сделать простой запрос POST, используя JSON с картой Django REST. Я не вижу никаких примеров этого в учебнике в любом месте?
Вот мой объект модели роли, который я хотел бы ПОСТ. Это будет совершенно новая роль, которую я бы хотел добавить в базу данных, но я получаю ошибку 500.
{
"name": "Manager",
"description": "someone who manages"
}
Вот мой запрос на завивание в командной строке 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/$', views.RoleList.as_view()),
url(r'^role/(?P<pk>[0-9]+)/$', 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, а не в бэкэнд. См. qaru.site/info/130454/...