Jak zrobić POST prosty JSON przy użyciu Django REST Framework? Brak tokenu CSRF lub niepoprawny
Byłoby wdzięczne, gdyby ktoś pokazał mi, jak zrobić proste żądanie POST przy użyciu JSON z ramką REST Django. Nigdzie nie widzę żadnych przykładów tego w tutorialu?
Oto mój obiekt modelu ról, który chciałbym POST. To będzie zupełnie nowa rola, którą chciałbym dodać do bazy danych, ale otrzymuję 500 błędów.
{
"name": "Manager",
"description": "someone who manages"
}
Oto moje żądanie curl w wierszu polecenia 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
CZY działa z żądaniem GET i mogę wyciągnąć wszystkie role z bazy danych, ale nie mogę stworzyć żadnych nowych ról. Nie mam ustawionych uprawnień. Używam standardowego widoku w 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
W moimurls.py
dla tej aplikacji odpowiednie odwzorowania adresu URL - widok są poprawne:
url(r'^roles/Komunikat o błędzie:
{
"detail": "CSRF Failed: CSRF token missing or incorrect."
}
Co tu się dzieje i jaka jest na to poprawka? Czy localhost jest żądaniem krzyżowym? dodałem@csrf_exempt
doRoleDetail
iRoleList
ale nic nie wydaje się zmieniać. Czy ten dekorator może być nawet dodany do klasy, czy też musi zostać dodany do metody? Dodawanie@csrf_exempt
udekoruj, mój błąd staje się:
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'
Następnie wyłączyłem CSRF przez całą aplikację, a teraz otrzymuję tę wiadomość:
{"non_field_errors": ["Nieprawidłowe dane"]}, gdy mój obiekt JSON, który znam, jest poprawny json. To błąd niezwiązany z polem, ale utknąłem tutaj.
Okazuje się, że mój syn nie był ważny?
{
"name": "admin",
"description": "someone who administrates"
}
vs
[
{
"name": "admin",
"description": "someone who administrates"
}
]
Posiadanie nawiasów zamykających [] powoduje niepowodzenie żądania POST. Ale za pomocą walidatora jsonlint.com oba moje obiekty json sprawdzają poprawność.
Aktualizacja: Problem polegał na wysłaniu POST z PostMan, a nie na zapleczu. Widziećhttps://stackoverflow.com/a/17508420/203312
, views.RoleList.as_view()),
url(r'^role/(?P<pk>[0-9]+)/Komunikat o błędzie:
{
"detail": "CSRF Failed: CSRF token missing or incorrect."
}
Co tu się dzieje i jaka jest na to poprawka? Czy localhost jest żądaniem krzyżowym? dodałem@csrf_exempt
doRoleDetail
iRoleList
ale nic nie wydaje się zmieniać. Czy ten dekorator może być nawet dodany do klasy, czy też musi zostać dodany do metody? Dodawanie@csrf_exempt
udekoruj, mój błąd staje się:
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'
Następnie wyłączyłem CSRF przez całą aplikację, a teraz otrzymuję tę wiadomość:
{"non_field_errors": ["Nieprawidłowe dane"]}, gdy mój obiekt JSON, który znam, jest poprawny json. To błąd niezwiązany z polem, ale utknąłem tutaj.
Okazuje się, że mój syn nie był ważny?
{
"name": "admin",
"description": "someone who administrates"
}
vs
[
{
"name": "admin",
"description": "someone who administrates"
}
]
Posiadanie nawiasów zamykających [] powoduje niepowodzenie żądania POST. Ale za pomocą walidatora jsonlint.com oba moje obiekty json sprawdzają poprawność.
Aktualizacja: Problem polegał na wysłaniu POST z PostMan, a nie na zapleczu. Widziećhttps://stackoverflow.com/a/17508420/203312
, views.RoleDetail.as_view()),
Komunikat o błędzie:
{
"detail": "CSRF Failed: CSRF token missing or incorrect."
}
Co tu się dzieje i jaka jest na to poprawka? Czy localhost jest żądaniem krzyżowym? dodałem@csrf_exempt
doRoleDetail
iRoleList
ale nic nie wydaje się zmieniać. Czy ten dekorator może być nawet dodany do klasy, czy też musi zostać dodany do metody? Dodawanie@csrf_exempt
udekoruj, mój błąd staje się:
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'
Następnie wyłączyłem CSRF przez całą aplikację, a teraz otrzymuję tę wiadomość:
{"non_field_errors": ["Nieprawidłowe dane"]}, gdy mój obiekt JSON, który znam, jest poprawny json. To błąd niezwiązany z polem, ale utknąłem tutaj.
Okazuje się, że mój syn nie był ważny?
{
"name": "admin",
"description": "someone who administrates"
}
vs
[
{
"name": "admin",
"description": "someone who administrates"
}
]
Posiadanie nawiasów zamykających [] powoduje niepowodzenie żądania POST. Ale za pomocą walidatora jsonlint.com oba moje obiekty json sprawdzają poprawność.
Aktualizacja: Problem polegał na wysłaniu POST z PostMan, a nie na zapleczu. Widziećhttps://stackoverflow.com/a/17508420/203312