app_drf.views_apiview_to_router 源代码

"""实现类似api_view的功能,但是要能够注册到router,以便可以在api root能看到
    api_view不能注册到router,那么就换成一个viewset,但是实际上功能还是类似上面的function views那样
"""

from django.contrib.auth.models import User
from app_models.models import UserExtra
from rest_framework import serializers
from rest_framework import viewsets
from rest_framework.response import Response

[文档]class UserAndExtra(viewsets.ViewSet): lookup_field = 'username_or_pk'
[文档] def retrieve(self, request, username_or_pk, format=None): # user = None user = request.user try: user = User.objects.get(username=username_or_pk) except: user = User.objects.get(id=username_or_pk) user_and_extra = {'username': user.username, 'first_name': user.first_name, 'weixin_openid': user.userextra.weixin_openid, 'qq': user.userextra.qq} return Response(user_and_extra)
[文档] def list(self, request, format=None): users = User.objects.all() user_and_extra = [] for u in users: try: weixin_openid = u.userextra.weixin_openid except: weixin_openid = '-' try: qq = u.userextra.qq except: qq = '-' u_data = {'username': u.username, 'first_name': u.first_name, 'weixin_openid': weixin_openid, 'qq': qq} user_and_extra.append(u_data) print(f'---> {user_and_extra}') return Response(user_and_extra)