Home > Blockchain >  Django - BaseSerializer.is_valid() takes 1 positional argument but 2 were given
Django - BaseSerializer.is_valid() takes 1 positional argument but 2 were given

Time:01-24

This project was working before, but then Heroku took away free tier so I have been trying to deploy somewhere else, but now all of a sudden I cannot even create a user locally even though I could before... Now when I create a user I get the error mentioned in the title.

serializers folder common.py file

from xml.dom import ValidationErr
from rest_framework import serializers
from django.contrib.auth import get_user_model, password_validation
from django.contrib.auth.hashers import make_password
User = get_user_model()

class UserSerializer(serializers.ModelSerializer):

  password = serializers.CharField(write_only=True)
  confirm_password = serializers.CharField(write_only=True)

  def validate(self, data):
    password = data.pop('password')
    confirm_password = data.pop('confirm_password')

    if password != confirm_password:
    raise ValidationErr({ 'confirm_password': 'Does not match the password'})

    password_validation.validate_password(password)

    data['password'] = make_password(password)

    return data
    
  class Meta:
    model = User
    fields = ('id', 'username', 'email', 'password', 'confirm_password')

views.py file

from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from rest_framework.exceptions import PermissionDenied
from django.contrib.auth import get_user_model
import jwt
User = get_user_model()
from datetime import datetime, timedelta
from jwt_auth.serializers.common import UserSerializer
from django.conf import settings

class RegisterView(APIView):

  def post (self, request):
    create_user = UserSerializer(data=request.data)
    try:
    create_user.is_valid(True)
    create_user.save()
    return Response(create_user.data, status=status.HTTP_201_CREATED)
    except Exception as e:
    print(str(e))
    return Response(e.__dict__ if e.__dict__ else str(e),        status=status.HTTP_422_UNPROCESSABLE_ENTITY)

class LoginView(APIView):
  def post(self, request):
    password = request.data.get('password')
    username = request.data.get('username')
    try:
    user_login = User.objects.get(username=username)
    except User.DoesNotExist:
    raise PermissionDenied('Credentials are incorrect!')
    if not user_login.check_password(password):
    raise PermissionDenied('Credentials are incorrect!')

    dt = datetime.now()   timedelta(days=7)

    token = jwt.encode(
    {
    'sub': user_login.id,
    'exp': int(dt.strftime('%s'))
    },
    settings.SECRET_KEY,
    'HS256'
    )
    print('TOKEN ----->', token)
    return Response({ 'token': token, 'message': f'Welcome back {user_login.username}' })

CodePudding user response:

is_valid() only accepts keyword argument "raise_exception=True":

class RegisterView(APIView):

  def post (self, request):
    create_user = UserSerializer(data=request.data)
    try:
    create_user.is_valid(raise_exception=True)
    ....
  • Related