Автор:jsx:38 СООБЩЕНИЙ http://127.0.0.1:8000/api/register/ 404 (Не найден) - Django / React
Я пытаюсь внедрить систему аутентификации и стек в части регистрации
Когда я отправляю данные формы, я получаю обратно эту ошибку:
СООБЩЕНИЕ http://127.0.0.1:8000/api/register/ 404 ( Не найдено)
Вот часть моего кода
url.py
from django.urls import path
from rest_framework_simplejwt.views import TokenObtainPairView, TokenRefreshView
from .views import RegisterView, LoginView, RefreshTokenView
urlpatterns = [
path("api/register/", RegisterView.as_view(), name="register"),
path("api/login/", LoginView.as_view(), name="login"),
path("api/token/refresh/", RefreshTokenView.as_view(), name="token_refresh"),
]
view.py
class RegisterView(APIView):
permissions_classes = [AllowAny]
def post(self, request):
serializer = UserSerializer(data=request.data)
if serializer.is_valid():
user = serializer.save()
return Response({"message": "User registered succefully"}, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
На стороне клиента; У меня есть утилита, которая создает baseUrl
import axios from "axios";
const API = axios.create({
baseURL: "http://127.0.0.1:8000/api/",
headers: {
"Content-Type": "application/json",
}
});
export default API;
И моя функция handleSubmit выглядит следующим образом;
const handleSubmit = async (e) => {
e.preventDefault();
setError(""); // Clear previous errors
try {
const endpoint = isSignup ? "register/" : "login/";
const response = await API.post(endpoint, formData);
if (isSignup) {
alert("Registration successful!");
setIsSignup(false); // Switch to login form
} else {
// Store JWT tokens
localStorage.setItem("accessToken", response.data.access);
localStorage.setItem("refreshToken", response.data.refresh);
localStorage.setItem("role", response.data.role);
console.log("Login successful:", response.data);
alert("Login successful!");
const roleRedirects = {
"admin": "/admin-dashboard",
"student": "/student-dashboard",
"lecturer": "/lecturer-dashboard",
"academic_registrar": "/registrar-dashboard"
};
window.location.href = roleRedirects[response.data.role] || "/dashboard";
}
} catch (error) {
setError(error.response?.data?.error || "Something went wrong. Please try again.");
console.error("Error:", error);
}
};
Мне нужна как можно большая помощь, которую вы могли бы оказать
Вам следует исправить опечатку в RegisterView.
permissions_classes = [AllowAny] # ❌ Incorrect
permission_classes = [AllowAny] # ✅ Correct
Вы пытались запросить эту конечную точку в postman? Если проблема не устранена в postman, значит, проблема в вашем серверном коде и конечных точках. Если postman успешно обработал запрос, значит, ваш интерфейс не выбирает этот URL. Для этого вы должны открыть / перенаправить свой порт django с помощью ngrok
ngrok http 8000
Затем укажите общедоступный URL-адрес ngrok во внешнем интерфейсе
Например, если ngrok выдал вам url: https://dehde-343-hdcnd-324n/ -> 8000 , то во внешнем интерфейсе замените "http://127.0.0.1:8000" на "https://dehde-343-hdcnd-324n/"
Это решит вашу проблему, но если проблема все еще не устранена, попробуйте выполнить следующее:
Для целей тестирования укажите полный URL-адрес регистрации вашего сервера в baseUrl API следующим образом:
const API = axios.create({
baseURL: "http://127.0.0.1:8000/api/register/",
headers: {
"Content-Type": "application/json",
}
});
Также попробуйте удалить последнее "/" из конечной точки и протестировать
http://127.0.0.1:8000/api/register