user9341676
user9341676

Reputation: 61

How can I change password into hash?

I am making Django applications.I am using Django Rest Framework.models.py is

class Info(models.Model):
    username = custom_fields.NotEmptyCharField(max_length=100, unique=True)
    email = models.EmailField()
    password = custom_fields.NotEmptyCharField(max_length=100)

serializers.py is

class InfoSerializer(serializers.ModelSerializer):
    created_time = serializers.DateTimeField(required=False)
    updated_time = serializers.DateTimeField(required=False)

views.py is

class InfoViews(viewsets.ModelViewSet):
    queryset = Info.objects.all()
    serializer_class = InfoSerializer

    def create(self, validated_data):
        user = get_user_model(**validated_data)
        user.set_password(validated_data['password'])
        user.save()

urls.py is

urlpatterns = [
    path('users/', views.InfoViews.as_view({
        'get': 'list',
        'post': 'create'
    })),
]

When I post new user data,

user = get_user_model(**validated_data)

TypeError: get_user_model() argument after ** must be a mapping, not Request error happens

I searched create() argument after ** must be a mapping, not unicode,so I found maybe necessary thing is not in serializer.py but I really cannot understand how to fix this.What is wrong in my code?How should I fix this?

Full traceback is

Traceback (most recent call last):
  File "/usr/local/lib/python3.6/site-packages/django/core/handlers/exception.py", line 35, in inner
    response = get_response(request)
  File "/usr/local/lib/python3.6/site-packages/django/core/handlers/base.py", line 128, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/usr/local/lib/python3.6/site-packages/django/core/handlers/base.py", line 126, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/usr/local/lib/python3.6/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
    return view_func(*args, **kwargs)
  File "/usr/local/lib/python3.6/site-packages/rest_framework/viewsets.py", line 95, in view
    return self.dispatch(request, *args, **kwargs)
  File "/usr/local/lib/python3.6/site-packages/rest_framework/views.py", line 494, in dispatch
    response = self.handle_exception(exc)
  File "/usr/local/lib/python3.6/site-packages/rest_framework/views.py", line 454, in handle_exception
    self.raise_uncaught_exception(exc)
  File "/usr/local/lib/python3.6/site-packages/rest_framework/views.py", line 491, in dispatch
    response = handler(request, *args, **kwargs)
  File "/opt/project/app/views.py", line 22, in create
    user = User(**validated_data)
TypeError: ModelBase object argument after ** must be a mapping, not Request

Upvotes: 0

Views: 75

Answers (1)

Alasdair
Alasdair

Reputation: 308769

Call get_user_model method to get the User class before creating the user:

User = get_user_model()
user = User(**validated_data)

Upvotes: 1

Related Questions