How to update user password in Django Rest Framework?

2024/11/20 20:37:49

I want to ask that following code provides updating password but I want to update password after current password confirmation process. So what should I add for it? Thank you.

class UserPasswordSerializer(ModelSerializer):class Meta:model = Userfields = ['password']extra_kwargs = {"password": {"write_only": True},}def update(self, instance, validated_data):for attr, value in validated_data.items():if attr == 'password':instance.set_password(value)else:setattr(instance, attr, value)instance.save()return instance
Answer

I believe that using a modelserializer might be an overkill. This simple serializer & view should work.

Serializers.py

from rest_framework import serializers
from django.contrib.auth.models import Userclass ChangePasswordSerializer(serializers.Serializer):model = User"""Serializer for password change endpoint."""old_password = serializers.CharField(required=True)new_password = serializers.CharField(required=True)

Views.py

from rest_framework import status
from rest_framework import generics
from rest_framework.response import Response
from django.contrib.auth.models import User
from . import serializers
from rest_framework.permissions import IsAuthenticated   class ChangePasswordView(UpdateAPIView):"""An endpoint for changing password."""serializer_class = ChangePasswordSerializermodel = Userpermission_classes = (IsAuthenticated,)def get_object(self, queryset=None):obj = self.request.userreturn objdef update(self, request, *args, **kwargs):self.object = self.get_object()serializer = self.get_serializer(data=request.data)if serializer.is_valid():# Check old passwordif not self.object.check_password(serializer.data.get("old_password")):return Response({"old_password": ["Wrong password."]}, status=status.HTTP_400_BAD_REQUEST)# set_password also hashes the password that the user will getself.object.set_password(serializer.data.get("new_password"))self.object.save()response = {'status': 'success','code': status.HTTP_200_OK,'message': 'Password updated successfully','data': []}return Response(response)return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
https://en.xdnf.cn/q/26279.html

Related Q&A

ImportError: No module named xlrd

I am currently using PyCharm with Python version 3.4.3 for this particular project.This PyCharm previously had Python2.7, and I upgraded to 3.4.3.I am trying to fetch data from an Excel file using Pand…

How do I automatically fix lint issues reported by pylint?

Just like we have "eslint --fix" to automatically fix lint problems in Javascript code, do we have something for pylint too for Python code?

Conversion from JavaScript to Python code? [closed]

Closed. This question is seeking recommendations for books, tools, software libraries, and more. It does not meet Stack Overflow guidelines. It is not currently accepting answers.We don’t allow questi…

connect to a DB using psycopg2 without password

I have a postgres database on my localhost I can access without a password$ psql -d mwt psql (8.4.12) Type "help" for help.mwt=# SELECT * from vatid;id | requester_vatid |...-----+---------…

Shebang doesnt work with python3

I have the following program:#!/usr/local/bin/python3print("Hello")Via terminal I do test.py and I get:Traceback (most recent call last):File "/usr/lib/python3.3/site.py", line 629,…

Why does pip freeze list pkg-resources==0.0.0?

On Ubuntu 16.04 with virtualenv 15.0.1 and Python 3.5.2 (both installed with apt) when I create and activate new Python virtual environment withvirtualenv .virtualenvs/wtf -p $(which python3) --no-site…

How to delete an instantiated object Python?

I am relatively new to object oriented programming and I cannot figure out how to delete an instantiated object in Python. if self.hit_paddle(pos) == True or self.hit_paddle2(pos) == True:bar = bar + 1…

Call method from string

If I have a Python class, and would like to call a function from it depending on a variable, how would I do so? I imagined following could do it:class CallMe: # Classdef App(): # Method one...def Foo(…

Scipy sparse... arrays?

So, Im doing some Kmeans classification using numpy arrays that are quite sparse-- lots and lots of zeroes. I figured that Id use scipys sparse package to reduce the storage overhead, but Im a little …

Using virtualenv with spaces in a path

I set up a virtualenv environment on my Mac, but cannot get Pip to install packages. It fails with the following error:/Volumes/Macintosh: bad interpreter: No such file or directoryI tracked the proble…