Я делаю вызов ajax в Typcript, который вызывает внутренний Web-сервис. Все конечные точки с "GET" работают, но "POST" говорит:
"403 Запрещено" - "подробнее: CSRF Ошибка: CSRF cookie не установлен"
Что я пытался решить проблему:
- Далее следуют https://docs.djangoproject.com/ko/1.11/ref/csrf/
- Попробовал удалить 'django.middleware.csrf.CsrfViewMiddleware'
- Попробовал @csrf_exempt
Ничто из этого не сработало, каждый раз по-прежнему происходит одна и та же ошибка.
Вот мой код в Typcript:
sendMessage(message, receiverId){
let self = this;
var message_obj = "{\"id\":\""+ GUID.generateGUID() +"\",\"message\":\""+ message +"\",\"receiverId\":\""+ receiverId + "\",\"moddate\":\""+ Date.now() +"\"}";
var message_json = JSON.parse(message_obj);
$.ajax({
type: "POST",
url: "/chat/message/",
data:{"message_object":message_json},
credentials: 'same-origin',
success: function (response) {
alert(response);
},
error: function (jqXHR, textStatus, errorThrown) {
alert(errorThrown);
}
})
}
Это пример рабочего вызова ajax:
getMessages(){
let self = this;
$.ajax({
type: "GET",
url: "/chat/message/",
dataType: "json",
success: function (response) {
response = JSON.stringify(response);
alert(response);
},
error: function(jqXHR, textStatus, errorThrown){
alert(errorThrown);
}
})
}
РЕДАКТИРОВАТЬ:
Здесь я попытался использовать csrf_exempt:
URLS.PY
from django.conf.urls import url
from django.views.decorators.csrf import csrf_exempt
from chat_api import views
urlpatterns = [
url(r'^message/$', csrf_exempt(views.ChatMessageAPIEndpoint.as_view())),
url(r'^message/(?P<commit>([0-9a-fA-F])+)', csrf_exempt(views.ChatMessageAPIEndpoint.as_view())),
url(r'^devicekey/(?P<devid>([\w+-:])+)', views.DeviceAPIEndpoint.as_view()),
url(r'^devicekey/$', views.DeviceAPIEndpoint.as_view()),
url(r'^contacts/$', views.ContactAPIEndpoint.as_view()),
url(r'^read/$', views.ReadStatusEndpoint.as_view()),
]
VIEWS.PY
@csrf_exempt
@need_post_parameters([PARAM_MESSAGE_OBJ])
def post(self, request, *args, **kwargs):
data = request.POST.get(PARAM_MESSAGE_OBJ)
try:
message_obj = json.loads(data)
except Exception as e:
return HttpResponseBadRequest(error_json("Could not parse JSON"))
...
Я нашел ошибку, и я отправлю ее здесь для равных ошибок:
Мои классы в Views.py, где используется "Oauth2APIView" ! Изменение его в "Вид" решило проблему для меня!
@csrf_exempt
. минимальный воспроизводимый примерjQuery.ajax()
. Вы должны включить заголовокX-CSRFToken
. docs.djangoproject.com/en/1.11/ref/csrf/#ajax