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

questionAnswers(8)

yourAnswerToTheQuestion