Feature: Add new public user-api and user-profile card in front-end

This commit is contained in:
winkidney
2020-07-23 23:56:24 +08:00
parent 978c686c66
commit dbca765b6a
6 changed files with 192 additions and 0 deletions

View File

@@ -6,6 +6,21 @@ from rest_framework.exceptions import ValidationError
from users.models import User
class PublicUserSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = User
fields = (
'username',
'gravatar',
settings.DRF_URL_FIELD_NAME,
)
extra_kwargs = {
settings.DRF_URL_FIELD_NAME: {
"view_name": "public-users:user-detail",
},
}
class UserSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = User

View File

@@ -7,6 +7,7 @@ from django.contrib.auth.decorators import login_required
from django.http import HttpResponseRedirect, HttpResponseBadRequest, HttpResponse
from django.urls import reverse
from django.utils.functional import lazy
from django_filters.rest_framework import DjangoFilterBackend
from rest_framework import mixins, routers
from rest_framework.permissions import BasePermission
from rest_framework.renderers import JSONRenderer
@@ -20,6 +21,21 @@ def reverse_lazy(name=None, *args):
return lazy(reverse, str)(name, args=args)
class PublicUserViewSet(
mixins.RetrieveModelMixin,
mixins.ListModelMixin,
GenericViewSet,
):
serializer_class = UserSerializer
filter_backends = (DjangoFilterBackend, )
filter_fields = ("username", )
pagination_class = None
def get_queryset(self):
username = self.request.GET.get("username", "")
return User.objects.filter(username=username)
class UserViewSet(
mixins.RetrieveModelMixin,
mixins.ListModelMixin,
@@ -87,3 +103,4 @@ def logout_user(request):
drf_router = routers.DefaultRouter()
drf_router.register(r'users', UserViewSet, basename="user")
drf_router.register(r'public-users', PublicUserViewSet, basename="public-user")