INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'rest_framework', ... ]
REST_FRAMEWORK = { 'DEFAULT_PERMISSION_CLASSES': ('rest_framework.permissions.IsAdminUser',), 'PAGE_SIZE': 10 }
class Question(mongoengine.document.Document): question = mongoengine.fields.StringField(max_length = 10240, required = True) answer = mongoengine.fields.BooleanField(required = True) reason = mongoengine.fields.StringField(max_length = 1024) meta = {"db_alias": "wdbk", 'clooection': 'question'}
class QuestionSerializer(serializers.Serializer): def create(self, validated_data): return Question.objects.create(**validated_data) def update(self, instance, validated_data): instance.question = validated_data.get('question', instance.question) instance.answer = validated_data.get('answer', instance.answer) instance.reason = validated_data.get('reason', instance.reason) instance.save() return instance(2) 继承 于rest_framework.serializers.ModelSerializer
class QuestionSerializer(<span style="font-family: Arial, Helvetica, sans-serif;">serializers.ModelSerializer</span>): class Meta: model = Question fields = ('question', 'answer', 'reason')(3) 在视图中自己实现序列化
from rest_framework import status from rest_framework.decorators import api_view from rest_framework.response import Response from models import Question from serializers import QuestionSerializer @api_view(['GET', 'POST']) def question_list(request): if request.method == 'GET': questions = Question.objects.all() serializer = QuestionSerializer(questions, many=True) return Response(serializer.data) elif request.method == 'POST': serializer = QuestionSerializer(data=request.data) if serializer.is_valid(): serializer.save() return Response(serializer.data, status=status.HTTP_201_CREATED) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
from models import Question from serializers import QuestionSerializer from django.http import Http404 from rest_framework.views import APIView from rest_framework.response import Response from rest_framework import status class QuestionList(APIView): def get(self, request, format=None): questions = Question.objects.all() serializer = QuestionSerializer(questions, many=True) return Response(serializer.data) def post(self, request, format=None): serializer = QuestionSerializer(data=request.data) if serializer.is_valid(): serializer.save() return Response(serializer.data, status=status.HTTP_201_CREATED) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)在urls.py中添加视图类
urlpatterns += [ url(r'^questions/$', views.QuestionList.as_view()), ](3)使用ViewSet
REST_FRAMEWORK = { # three auth way: session,basic,token 'DEFAULT_AUTHENTICATION_CLASSES': ( 'rest_framework.authentication.BasicAuthentication', 'rest_framework.authentication.SessionAuthentication', 'rest_framework.authentication.TokenAuthentication', ), 'DEFAULT_PERMISSION_CLASSES': ('rest_framework.permissions.IsAdminUser',), 'PAGE_SIZE': 10 }具体可以参考 http://www.django-rest-framework.org/api-guide/authentication/#authentication