Skip to content

Commit 18b53a6

Browse files
committed
add patch method for user model flow
1 parent 8377fb9 commit 18b53a6

File tree

2 files changed

+23
-3
lines changed

2 files changed

+23
-3
lines changed

elastic_framework/contrib/auth/serializers.py

+6
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,12 @@ class ECUserSerializer(serializers.ModelSerializer):
3636
class Meta:
3737
model = get_user_model()
3838
exclude = ('password',)
39+
read_only_fields = ['id', 'password']
40+
41+
# XXX TODO: password field could be customized by developer in user model
42+
# we have to handle in serializer method password field as read_only
43+
# At the moment we assume that password field name is "password"
44+
3945

4046
class ECUserResponseSerializerClass(serializers.ModelSerializer):
4147

elastic_framework/contrib/auth/views.py

+17-3
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
from rest_framework.generics import (GenericAPIView, ListCreateAPIView,
88
RetrieveUpdateAPIView)
99
from rest_framework.response import Response
10-
from rest_framework.exceptions import ParseError, PermissionDenied
10+
from rest_framework.exceptions import ParseError
1111
from rest_framework import permissions
1212
from rest_framework import status
1313

@@ -18,6 +18,7 @@
1818
from .serializers import (ECUserSignupSerializer, ECUserResponseSerializerClass,
1919
ECUserSerializer)
2020
from .utils import create_token, get_token_from_request
21+
from .permissions import check_user_is_owner
2122

2223
logger = logging.getLogger(__name__)
2324

@@ -105,12 +106,25 @@ def get_queryset(self):
105106

106107
def get(self, request, *args, **kwargs):
107108
user = self.get_object()
108-
if not request.user == user:
109-
raise PermissionDenied()
109+
check_user_is_owner(user, request)
110110
user_serializer = self.get_serializer(instance=user)
111111
return Response(user_serializer.data,
112112
status=200)
113113

114+
def patch(self, request, *args, **kwargs):
115+
user = self.get_object()
116+
check_user_is_owner(user, request)
117+
data = request.data
118+
with transaction.atomic():
119+
user_serializer = self.get_serializer(instance=user, data=data,
120+
partial=True)
121+
if not user_serializer.is_valid():
122+
raise APIError(status=400,
123+
message=user_serializer.errors,
124+
show=True)
125+
user_serializer.save()
126+
return Response(status=200,
127+
data=user_serializer.data)
114128

115129
class Oauth2ECUserLoginView(GenericAPIView):
116130

0 commit comments

Comments
 (0)