В следующем коде я пишу Login API, но когда я печатаю пользователя, он выдает мне результат None
В следующем коде я создал Login API, но когда я ввожу запрос в Postman, он всегда выдает мне Error Response Кто-нибудь может помочь мне решить эту проблему. Я выкладываю весь код и зависимости, чтобы любой мог проверить и дать мне решение.
Это мой файл views.py
from django.shortcuts import render
from rest_framework.permissions import AllowAny
from rest_framework.views import APIView
from rest_framework.response import Response
from .serializers import UserSerializer, RegisterSerializer, UserLoginSerializer
from django.contrib.auth.models import User
from rest_framework import generics, permissions
from rest_framework import status
from django.contrib.auth import authenticate,login
from django.contrib import auth
# from knox.models import AuthToken
# Create your views here.
from django.views.decorators.csrf import csrf_exempt
from rest_framework.decorators import api_view
#Login Credentials
"//Create a Login API in Django?"
class UserLoginView(APIView):
permission_classes = (AllowAny,)
serializer_class = UserLoginSerializer
def get(self,request,format=None):
serializer=UserLoginSerializer(data=request.data)
# print(serializer.is_valid(raise_exception=True));
if serializer.is_valid(raise_exception=True):
email = serializer.data.get('email')
password = serializer.data.get('password')
print(email)
print(password)
user=authenticate(email=email,password=password)
print(user)
if user is not None:
login(request, user)
return Response({'msg':'Login Success'},status=status.HTTP_200_OK)
else:
return Response({'msg':{'Email or Password Does not match'}},status=status.HTTP_404_NOT_FOUND)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
#Это мой файл serializer.py.
class UserLoginSerializer(serializers.ModelSerializer):
email=serializers.EmailField(max_length=200)
class Meta:
model = User
fields= ['email','password']
Когда я ввожу запрос, он всегда выдает ошибку, поэтому, пожалуйста, проверьте мой код login api и решите ее как можно скорее.
Модель пользователя по умолчанию Django принимает поле (username & password) для аутентификации.
В вашем коде вы пытались аутентифицироваться с помощью (email & password), поэтому он выдает None при каждом запросе на вход.
попробуйте аутентификацию (имя пользователя & пароль) вместо (email & пароль) Я имею в виду изменение следующим образом...
user=authenticate(username=username,password=password)
Вместо...
user=authenticate(email=email,password=password)
Если вы все еще хотите аутентифицироваться по электронной почте, то вам нужно настроить модель Default User model
о настройке Django User Model читайте по ссылке здесь
Код пользовательской модели Cutomizaion находится здесь...
from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin
from django.db import models
from django.utils import timezone
from django.utils.translation import gettext_lazy as _
from .managers import CustomUserManager
class CustomUser(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(_('email address'), unique=True)
is_staff = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)
date_joined = models.DateTimeField(default=timezone.now)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []
objects = CustomUserManager()
def __str__(self):
return self.email
В приведенном выше коде эта строка USERNAME_FIELD = 'email' дает разрешение на аутентификацию по полю Email вместо поля Username
