Validation using Django Rest Framework and Django Forms
As a web developer, you are going to spend a decent amount of your time building and update API endpoints.
If you are using Django, I recommend using Django’s excellent Django Rest Framework.
There are three places you can add valiation
Adding Validation at DRF/Django View-Level
An easy place to add valiation is directly in the view.
fromrest_framework.exceptionsimportAPIExceptionclassInvalidAPIQuery(APIException):status_code=400default_detail='An invalid query parameter was provided'
classDocumentUploadView(UserAuditLogMixin,APIView):permission_classes=(IsAuthenticated,)parser_classes=(MultiPartParser,FormParser,)defpost(self,request,format=None):if'submission_id'notinrequest.POST:raiseInvalidAPIQuery("`submission_id` is required")document=models.Document.create_document_from_request(request)returnResponse({'document':serializers.DocumentSerializer(document['document']).data},status=201)
Adding at DRF Serializer-Level
DRF serializers provide their own validation mechanism.
fromrest_frameworkimportserializersclassBuildingSerializer(serializers.ModelSerializer):defvalidate(self,data):errors={}year_built=data.get('year_built')year_rennovated=data.get('year_rennovated')ifyear_rennovated<year_built:errors['error']=u'You\'re an idiot!'raiseserializers.ValidationError(errors)returndata
Adding at Django Form-Level
Django forms, and specifically Django model forms are an decent place to add valiation.
fromdjangoimportformsclassBuildingForm(forms.Form):year_built=forms.IntegerField(required=True)year_rennovated=forms.IntegerField(required=True)defclean(self):cleaned=super(BuildingForm,self).clean()year_built=cleaned.get('year_built')year_rennovated=cleaned.get('year_rennovated')ifyear_rennovated<year_built:raiseforms.ValidationError(u'You\'re an idiot!')