Como fazer um simples JSON POST usando o Django REST Framework? Token CSRF ausente ou incorreto
Gostaria que alguém me mostrasse como fazer uma simples solicitação POST usando o framework JSON com Django REST. Eu não vejo nenhum exemplo disso no tutorial em algum lugar?
Aqui está o meu objeto de modelo de função que gostaria de postar. Este será um novo papel que gostaria de adicionar ao banco de dados, mas estou recebendo um erro 500.
{
"name": "Manager",
"description": "someone who manages"
}
Aqui está o meu pedido de onda em um prompt do terminal bash:
curl -X POST -H "Content-Type: application/json" -d '[
{
"name": "Manager",
"description": "someone who manages"
}]'
http://localhost:8000/lakesShoreProperties/role
O URL
http://localhost:8000/lakesShoreProperties/roles
FUNCIONA com uma solicitação GET e posso extrair todas as funções do banco de dados, mas não consigo criar nenhuma nova função. Eu não tenho permissões definidas. Estou usando uma exibição padrão no 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
E no meuurls.py
para este aplicativo, os mapeamentos de visualização de URL relevantes estão corretos:
url(r'^roles/Mensagem de erro é:
{
"detail": "CSRF Failed: CSRF token missing or incorrect."
}
O que está acontecendo aqui e qual é a correção para isso? O localhost é uma solicitação cruzada? Eu adicionei@csrf_exempt
paraRoleDetail
eRoleList
mas isso não parece mudar nada. Esse decorador pode ser adicionado a uma classe ou precisa ser adicionado a um método? Adicionando o@csrf_exempt
decorar, meu erro se torna:
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'
Então desativei o CSRF em todo o aplicativo e agora recebo esta mensagem:
{"non_field_errors": ["Dados inválidos"]} quando meu objeto JSON que eu conheço é json válido. É um erro que não é de campo, mas estou preso aqui.
Bem, acontece que meu json não era válido?
{
"name": "admin",
"description": "someone who administrates"
}
vs
[
{
"name": "admin",
"description": "someone who administrates"
}
]
Ter os colchetes de fechamento [] faz com que a solicitação POST falhe. Mas usando o validador jsonlint.com, ambos os meus objetos json são validados.
Atualizar: O problema foi com o envio do POST com o PostMan, não no backend. Vejohttps://stackoverflow.com/a/17508420/203312
, views.RoleList.as_view()),
url(r'^role/(?P<pk>[0-9]+)/Mensagem de erro é:
{
"detail": "CSRF Failed: CSRF token missing or incorrect."
}
O que está acontecendo aqui e qual é a correção para isso? O localhost é uma solicitação cruzada? Eu adicionei@csrf_exempt
paraRoleDetail
eRoleList
mas isso não parece mudar nada. Esse decorador pode ser adicionado a uma classe ou precisa ser adicionado a um método? Adicionando o@csrf_exempt
decorar, meu erro se torna:
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'
Então desativei o CSRF em todo o aplicativo e agora recebo esta mensagem:
{"non_field_errors": ["Dados inválidos"]} quando meu objeto JSON que eu conheço é json válido. É um erro que não é de campo, mas estou preso aqui.
Bem, acontece que meu json não era válido?
{
"name": "admin",
"description": "someone who administrates"
}
vs
[
{
"name": "admin",
"description": "someone who administrates"
}
]
Ter os colchetes de fechamento [] faz com que a solicitação POST falhe. Mas usando o validador jsonlint.com, ambos os meus objetos json são validados.
Atualizar: O problema foi com o envio do POST com o PostMan, não no backend. Vejohttps://stackoverflow.com/a/17508420/203312
, views.RoleDetail.as_view()),
Mensagem de erro é:
{
"detail": "CSRF Failed: CSRF token missing or incorrect."
}
O que está acontecendo aqui e qual é a correção para isso? O localhost é uma solicitação cruzada? Eu adicionei@csrf_exempt
paraRoleDetail
eRoleList
mas isso não parece mudar nada. Esse decorador pode ser adicionado a uma classe ou precisa ser adicionado a um método? Adicionando o@csrf_exempt
decorar, meu erro se torna:
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'
Então desativei o CSRF em todo o aplicativo e agora recebo esta mensagem:
{"non_field_errors": ["Dados inválidos"]} quando meu objeto JSON que eu conheço é json válido. É um erro que não é de campo, mas estou preso aqui.
Bem, acontece que meu json não era válido?
{
"name": "admin",
"description": "someone who administrates"
}
vs
[
{
"name": "admin",
"description": "someone who administrates"
}
]
Ter os colchetes de fechamento [] faz com que a solicitação POST falhe. Mas usando o validador jsonlint.com, ambos os meus objetos json são validados.
Atualizar: O problema foi com o envio do POST com o PostMan, não no backend. Vejohttps://stackoverflow.com/a/17508420/203312