app_drf.views 源代码

from django.shortcuts import render, HttpResponse
from django.contrib.auth.models import User
from app_models.models import UserExtra
from .serializers import UserSerializer, UserExtraSerializer
from rest_framework import viewsets
from rest_framework import views as rest_views
from rest_framework.response import Response

# Create your views here.
[文档]def alive(request): return HttpResponse('---> /app_drf/alive/')
[文档]class UserViewSet(viewsets.ModelViewSet): queryset = User.objects.all().order_by('-date_joined') serializer_class = UserSerializer
[文档]class UserExtraViewSet(viewsets.ModelViewSet): queryset = UserExtra.objects.all().order_by('id') serializer_class = UserExtraSerializer
from rest_framework import serializers ### 上面的的因为是 DRF的ViewSet,所以可以用router注册 ### 以下因为是APIView,需要在本地的urls中,用FeiView.as_view()来显示响应,不能用router注册
[文档]class FeiUserSerializer(serializers.ModelSerializer):
[文档] class Meta: model = User fields = ['username', 'first_name', 'last_name', 'email', 'is_staff', 'is_active', 'objects']
[文档]class FeiUserExtraSerializer(serializers.ModelSerializer):
[文档] class Meta: model = UserExtra fields = ['weixin_openid', 'qq']
[文档]class FeiView(rest_views.APIView): """成功显示了两个models, User , UserExtra """
[文档] def get(self, request, pk, format=None, **kwargs): user = User.objects.get(id=pk) user_serializer = FeiUserSerializer(instance=user) userextra = UserExtra.objects.get(id=pk) userextra_serializer = FeiUserExtraSerializer(instance=userextra) print(f'===> {user.__dict__} / {userextra.__dict__}') print(f'---> {user_serializer.data} / {userextra_serializer.data}') print(f'--- {user_serializer.__dict__}') return Response({ 'user': user_serializer.data, 'userextra': userextra_serializer.data})
from rest_framework.decorators import api_view
[文档]@api_view() def send_json(request): return Response({"key1": "value1"})
# Use ViewSet instead of APIView (FeiView)
[文档]class FeiViewSet(viewsets.ViewSet):
[文档] def list(self, request, format=None, **kwargs): user = User.objects.all().order_by('id') userextra = UserExtra.objects.order_by('id') user_serializer = FeiUserSerializer(user, many=True) userextra_serializer = FeiUserExtraSerializer(userextra, many=True) return Response({ 'user': user_serializer.data, 'userextra': userextra_serializer.data })