Ошибка 401 в приложении React и django-rest-framework
Сначала я получил это useState, которое принимает данные из ввода:
const Checkout = ({cart, totalPrice, code}) => {
const [values, setValues] = useState({
email: '',
city:'',
adress:'',
postalCode:'',
phone:'',
firstName:'',
lastName:'',
message:'',
price: totalPrice,
code: code,
shipmentFee:0,
shipmentMethod:'',
lockerId:'',
cart:cart,
});
Затем я отправляю его с помощью функции generateOrder(values):
export const generateOrder = (order) => {
return fetch(`${url}/orders/generate-bank-transfer-order/`,{
method:"POST",
body:order
})
.then((response) => {
return response.json();
})
.catch((error) => console.log(error))
};
Он указывает на этот url в urls.py: path('generate-bank-transfer-order/',generate_bank_transfer_order, name="generate-bank-transfer")
А это представление, которое я использую, сейчас я просто хочу, чтобы оно возвращало отправленные данные, чтобы я мог проверить, работает ли оно:
@csrf_exempt
def generate_bank_transfer_order(request):
if request.method == "POST":
body = request.body
return JsonResponse({"test":body})
Все, что я получаю, это 401 Unauthorized и я понятия не имею, как это исправить. Есть идеи?
Если вы используете класс аутентификации по умолчанию в настройках типа :
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.BasicAuthentication',
'rest_framework.authentication.SessionAuthentication',
]
}
Первый импорт
from rest_framework.permissions import AllowAny
тогда измените вашу функцию на
@api_view(['POST'])
@permission_classes([AllowAny])
def generate_bank_transfer_order(request):
if request.method == "POST":
body = request.body
return JsonResponse({"test":body})
Для более подробной информации
Класс разрешения AllowAny разрешает неограниченный доступ, независимо от того, был ли запрос аутентифицирован или неаутентифицирован.
Это разрешение не является строго необходимым, поскольку вы можете достичь того же результата, используя пустой список или кортеж для разрешения но вы можете счесть полезным указать этот класс, поскольку он делает намерение явным.