diff --git a/account/serializers.py b/account/serializers.py index 68eca7c9..6c50194f 100644 --- a/account/serializers.py +++ b/account/serializers.py @@ -35,6 +35,7 @@ class UserSerializer(serializers.ModelSerializer): class UserProfileSerializer(serializers.ModelSerializer): + user = UserSerializer() class Meta: model = UserProfile diff --git a/account/urls/user.py b/account/urls/user.py index 921faf69..8ca0adf1 100644 --- a/account/urls/user.py +++ b/account/urls/user.py @@ -1,11 +1,10 @@ from django.conf.urls import url from ..views.user import (SSOAPI, AvatarUploadAPI, TwoFactorAuthAPI, - UserNameAPI, UserInfoAPI, UserProfileAPI) + UserNameAPI, UserProfileAPI) urlpatterns = [ url(r"^username/?$", UserNameAPI.as_view(), name="user_name_api"), - url(r"^user/(?P\w+)/?$", UserInfoAPI.as_view(), name="user_info_api"), url(r"^profile/?$", UserProfileAPI.as_view(), name="user_profile_api"), url(r"^avatar/upload/?$", AvatarUploadAPI.as_view(), name="avatar_upload_api"), url(r"^sso/?$", SSOAPI.as_view(), name="sso_api"), diff --git a/account/views/user.py b/account/views/user.py index 0c0ea111..fa97a806 100644 --- a/account/views/user.py +++ b/account/views/user.py @@ -15,11 +15,12 @@ from utils.shortcuts import rand_str from ..decorators import login_required from ..models import User, UserProfile from ..serializers import (SSOSerializer, TwoFactorAuthCodeSerializer, - UserSerializer, UserProfileSerializer, + UserProfileSerializer, EditUserProfileSerializer, AvatarUploadForm) class UserNameAPI(APIView): + @method_decorator(ensure_csrf_cookie) def get(self, request): """ Return Username to valid login status @@ -37,37 +38,22 @@ class UserNameAPI(APIView): }) -class UserInfoAPI(APIView): - # @login_required - @method_decorator(ensure_csrf_cookie) - def get(self, request, **kwargs): - """ - Return user info api - """ - try: - user = User.objects.get(username=kwargs["username"]) - except User.DoesNotExist: - return self.error("User does not exist") - profile = UserProfile.objects.get(user=user) - dit = UserProfileSerializer(profile).data - dit["user"] = UserSerializer(user).data - return self.success(dit) - - class UserProfileAPI(APIView): @login_required - def get(self, request): + def get(self, request, **kwargs): """ - Return user info api + Return user info according username or user_id """ + username = request.GET.get("username") try: - user = User.objects.get(id=request.user.id) + if username: + user = User.objects.get(username=username) + else: + user = request.user except User.DoesNotExist: return self.error("User does not exist") profile = UserProfile.objects.get(user=user) - dit = UserProfileSerializer(profile).data - dit["user"] = UserSerializer(user).data - return self.success(dit) + return self.success(UserProfileSerializer(profile).data) @validate_serializer(EditUserProfileSerializer) @login_required diff --git a/utils/api/api.py b/utils/api/api.py index 78018cdb..197026a2 100644 --- a/utils/api/api.py +++ b/utils/api/api.py @@ -65,6 +65,7 @@ class APIView(View): for parser in self.request_parsers: if content_type.startswith(parser.content_type): break + # else means the for loop is not interrupted by break else: raise ValueError("unknown content_type '%s'" % content_type) if body: