Сериализатор не получает данные, (данные пустые OrderedDict())
обратите внимание, что email
здесь в основном имя пользователя, чтобы не запутаться, в serializer.py я отладил данные, но кажется, что user
дает мне None
serializer.py
class LoginSerializer(serializers.Serializer):
def validate(self, data):
email = data.get("email")
print(f" email here : {email}")
password = data.get("password")
user = authenticate(username=email, password=password)
print(f"{user} username serializer ")
print(f"this is data : {data}")
if user is not None:
return data
raise serializers.ValidationError("Incorrect Credentials")
views.py
class LoginView(views.APIView):
def post(self, request):
data = serializers.LoginSerializer(data=request.data)
print(data.is_valid())
print(data.errors)
print(f" HEEERE::: {data}")
if self.request.method == 'POST':
if data.is_valid():
auth = authenticate(
username=data.validated_data['email'].value, password=data.validated_data['password'].value)
print(f"auth:: {auth}")
if auth is not None:
login(request, auth)
request.session['user_id'] = auth.id
print("test")
return redirect("/ticket")
else:
return HttpResponse("Invalid Credentials")
else:
return HttpResponse("Data not being validated :O")
на стороне фронтенда (React):
import React, { useState } from 'react';
import { Link } from 'react-router-dom';
import { connect } from 'react-redux';
import { login } from '../actions/auth';
import axios from 'axios';
function Login(){
const [login,setLogin] = useState({
email: '',
password:''
});
const { email, password } = login;
function handleChange(e){
console.log(e.target.value);
setLogin({
...login,
[e.target.name]: e.target.value
});
}
function handleSubmit(e){
e.preventDefault();
axios.post(' http://127.0.0.1:8000/login/', login)
console.log(login);
}
return (
<div className="container">
<form method='post' onSubmit={handleSubmit}>
<h1>Login</h1>
<label>
Email:
<input type='text' name = 'email' value={email} onChange={e=>handleChange(e)} required/>
</label>
<label>
Password:
<input type='password' name = 'password' value={password} onChange={e=>handleChange(e)} required/>
</label>
<button type='submit'>Login</button>
</form>
<p className='mt-3'>
Don't have an Account? <Link to='/signup'>Sign Up</Link>
</p>
</div>
);
};
const mapStateToProps = state => ({
isAuthenticated: state.auth.isAuthenticated
});
export default Login
обратите внимание, что когда я нажимаю Login
я получаю LoginSerializer(data={'email': 'ghazi-z3balawi@outlook.com', 'password': 'ghazi2000'}):
на cmd, (посмотрите на print(f" HEEERE::: {data}")
) в views.py
Я не уверен, как здесь работает сериализатор, любая помощь будет принята с благодарностью.
Ваш сериализатор не определяет никаких полей. Пожалуйста, ознакомьтесь с учебником по DRF.
https://www.django-rest-framework.org/api-guide/serializers/#declaring-serializers