#python #reactjs #django #rest #axios
#питон #реагирует на #джанго #остальное #аксиос
Вопрос:
У меня проблема с запросом post и put. Мои запросы с axios в react:
handleSubmit() { axios.post('http://127.0.0.1:8000/api/tasks/',{ headers:{"Authorization":`Token ${this.state.token}`}, author:this.state.id, title:this.state.title, desc:this.state.desc, done:false, }) .then( response =gt;{console.log(response);} ) .then( ()=gt;{window.location.reload(false);} ) }
Все работает нормально, но когда я изменяю AllowAny на аутентифицированный в приведенном ниже коде:
REST_FRAMEWORK = { 'DEFAULT_PERMISSION_CLASSES': [ 'rest_framework.permissions.IsAuthenticated', ], 'DEFAULT_AUTHENTICATION_CLASSES': [ 'rest_framework.authentication.SessionAuthentication', 'rest_framework.authentication.TokenAuthentication', ] }
я получаю такую ошибку
POST http://127.0.0.1:8000/api/tasks/ 403 (Forbidden) dispatchXhrRequest @ xhr.js:210 xhrAdapter @ xhr.js:15 dispatchRequest @ dispatchRequest.js:58 request @ Axios.js:108 Axios.lt;computedgt; @ Axios.js:140 wrap @ bind.js:9 handleSubmit @ TaskCreate.js:41 onClick @ TaskCreate.js:73 callCallback @ react-dom.development.js:3945 invokeGuardedCallbackDev @ react-dom.development.js:3994 invokeGuardedCallback @ react-dom.development.js:4056 invokeGuardedCallbackAndCatchFirstError @ react-dom.development.js:4070 executeDispatch @ react-dom.development.js:8243 processDispatchQueueItemsInOrder @ react-dom.development.js:8275 processDispatchQueue @ react-dom.development.js:8288 dispatchEventsForPlugins @ react-dom.development.js:8299 (anonymous) @ react-dom.development.js:8508 batchedEventUpdates$1 @ react-dom.development.js:22396 batchedEventUpdates @ react-dom.development.js:3745 dispatchEventForPluginEventSystem @ react-dom.development.js:8507 attemptToDispatchEvent @ react-dom.development.js:6005 dispatchEvent @ react-dom.development.js:5924 unstable_runWithPriority @ scheduler.development.js:468 runWithPriority$1 @ react-dom.development.js:11276 discreteUpdates$1 @ react-dom.development.js:22413 discreteUpdates @ react-dom.development.js:3756 dispatchDiscreteEvent @ react-dom.development.js:5889 createError.js:16 Uncaught (in promise) Error: Request failed with status code 403 at createError (createError.js:16) at settle (settle.js:17) at XMLHttpRequest.onloadend (xhr.js:66)
В дополнение к этому, запросы на получение работают правильно, даже если я перейду на IsAuthenticated.
const getTasks = () =gt;{ //this works fine axios.get("http://127.0.0.1:8000/api/tasks/" `user/${id}/` ,{headers:{"Authorization":`Token ${props.token}`}}) .then( response =gt; { setTasks(response.data); } ) }
Я ищу ответ уже 4 дня и не могу получить никаких объяснений этой проблемы. Также там ставится запрос:
const doneTask = (t_id,title,desc) =gt; { axios.put("http://127.0.0.1:8000/api/tasks/" `${t_id}/`,{ headers:{"Authorization":`Token ${props.token}`,"Content-Type":'application/json'}, author: 1, title: title, desc: desc, done: true } ) .then((response)=gt;{ console.log(response); }).catch((error)=gt;{console.log(error)}) .then( ()=gt;{window.location.reload(false);} ) }
И пример представления API в django rest:
class TaskList(generics.ListCreateAPIView): queryset = Task.objects.all() serializer_class = TaskSerializer
Нужно ли мне отправлять идентификатор сеанса в заголовке? Я удалил csrf из django, прокомментировав это, так как у меня есть проверка токенов.
Комментарии:
1. Можете ли вы опубликовать код метода Django PUT
2. Можете ли вы также показать пример вашего представления API, пожалуйста
3. Я думаю, что это проблема, связанная с csrf, вы можете использовать
@csrf_exempt
в django метод API выше.4. Я пробовал это, и ошибка осталась прежней @ShakeelAfridi