Данные не отправляются на конечную точку django [duplicate]
Я пытаюсь отправить данные в конечную точку django. Которые затем будут использоваться для сравнения с записями в базе данных. Данные не отправляются на конечную точку, поэтому я получаю ошибку Invalid request в консоли браузера при вызове конечной точки api/login.Вот мой фронтенд код
import React, { useState } from 'react';
import { Link, useNavigate } from 'react-router-dom';
import '../css/login.css';
import axios from 'axios';
function Login() {
const [formData, setFormData] = useState({
username: '',
password: ''
});
const navigate = useNavigate();
const handleChange = (e) => {
const { name, value } = e.target;
setFormData(prevState => ({
...prevState,
[name]: value
}));
};
const handleSubmit = async (event) => {
event.preventDefault();
try {
const response = await axios.post('http://127.0.0.1:8000/api/login/', formData);
if (response.data.message) {
switch (response.data.role) {
case 'Business Development Partner':
navigate('/bdpdashboard');
break;
case 'Recruiter':
navigate('/employeedashboard');
break;
case 'Manager':
navigate('/managerdashboard');
break;
case 'Business Development Partner Manager':
navigate('/bdpmdashboard');
break;
case 'Account Manager':
navigate('/amanagerdashboard');
break;
default:
console.error('Invalid role:', response.data.role);
}
} else {
console.error('Login failed:', response.data.error);
}
} catch (error) {
console.error('Login failed:', error);
}
};
return (
<div className="login-container">
<h2>Login</h2>
<form onSubmit={handleSubmit}>
<div className="input-group">
<label htmlFor="username">Username</label>
<input
type="text"
id="username"
name="username"
value={formData.username}
onChange={handleChange}
required
/>
</div>
<div className="input-group">
<label htmlFor="password">Password</label>
<input
type="password"
id="password"
name="password"
value={formData.password}
onChange={handleChange}
required
/>
</div>
<button type="submit">Login</button>
</form>
<div className="register-link">
<span>Don't have an account? </span>
<Link to="/employeeregistration">Register</Link>
</div>
</div>
);
}
export default Login;
В api/login вызывается следующее представление
def verify_login(request):
if request.method == 'POST':
data = request.POST
print(data)
# Retrieve stored login details
stored_login = LoginDetails.objects.get(username__iexact=data.get('username'))
print(stored_login.username)
if stored_login:
# Compare the passwords directly
if data.get('password') == stored_login.password:
# Authentication successful
user_role = stored_login.user_data.role if stored_login.user_data and stored_login.user_data.role else None
print(user_role)
return JsonResponse({'message': 'Login successful', 'role': user_role})
else:
# Password does not match
return JsonResponse({'error': 'Invalid password'}, status=401)
else:
# Username not found
return JsonResponse({'error': 'Invalid username'}, status=401)
return JsonResponse({'error': 'Invalid request method'}, status=405)
Модель django, используемая в представлении
class LoginDetails(models.Model):
user_data = models.OneToOneField(UserData, on_delete=models.CASCADE, null = True)
username = models.CharField(max_length=255, unique=True, null=True)
password = models.CharField(max_length=255, null=True) # Note: It's recommended to use hashed passwords in production
def __str__(self):
return self.username
Когда я печатаю данные на терминале python, на котором запущен сервер django, я получаю следующее
<QueryDict: {}>
Почему данные не отправляются на конечную точку?