angularjs - Overriding validation for Django for base64 string for model.imagefield -


i using angular , bootstrap serve forms. if user uploads image, angular serves in "data:" format, django looking file type. have fixed issue overriding both perform_authentication (to modify image file) , perform_create (to inject user_id). there better way override?

i'd rather not override view. i'd rather override way django validates imagefields. want check if passed value 64-bit string, if is, modify file type, validate imagefield. below code works is, don't feel optimal.

here view:

class usercredentiallist(generics.listcreateapiview):     permission_classes = (iscredentialowneroradmin,)     serializer_class = credentialserializer      """     view should return list of purchases     authenticated user.     """      def get_queryset(self):         """         view should return list of models         maker passed in url         """         user = self.request.user         return credential.objects.filter(member=user)      def perform_create(self, serializer):         serializer.save(member_id=self.request.user.id)      def perform_authentication(self, request):         if request.method == 'post':             data = request.data.pop('document_image', none)              django.core.files.base import contentfile             import base64             import 6             import uuid              # check if base64 string             if isinstance(data, six.string_types):                 # check if base64 string in "data:" format                 if 'data:' in data , ';base64,' in data:                     # break out header base64 content                     header, data = data.split(';base64,')                  # try decode file. return validation error if fails.                 try:                     decoded_file = base64.b64decode(data)                 except typeerror:                     self.fail('invalid_image')                  # generate file name:                 file_name = str(uuid.uuid4())[:12]  # 12 characters more enough.                 # file name extension:                 import imghdr                  file_extension = imghdr.what(file_name, decoded_file)                 file_extension = "jpg" if file_extension == "jpeg" else file_extension                  complete_file_name = "%s.%s" % (file_name, file_extension,)                  data = contentfile(decoded_file, name=complete_file_name)                  request.data['document_image'] = data         request.user 

and here serializer:

class credentialserializer(serializers.modelserializer):     class meta:         model = credential         fields = (             'id',             'credential_type',             'credential_number',             'date_received',             'is_verified',             'date_verified',             'document_image',         ) 

and here model:

class credential(models.model):     """used store various credentials member validation."""     document_image = models.imagefield(         upload_to=get_upload_path(instance="instance",                                   filename="filename.ext",                                   path='images/credentials/'))      passenger = 'p'     owner = 'o'     captain = 'c'     credential_choices = (         (passenger, 'passenger'),         (owner, 'owner'),         (captain, 'captain'),     )      credential_type = models.charfield(max_length=1,                                        choices=credential_choices,                                        default=passenger)     credential_number = models.charfield(max_length=255)     date_received = models.datetimefield(auto_now_add=true)     is_verified = models.booleanfield(default=false)     date_verified = models.datetimefield(blank=true, null=true)     member = models.foreignkey(settings.auth_user_model,                                   related_name='credentials') 

i used below link me, want figure out how override proper method django rest framework upload image: "the submitted data not file"

well i've made 1 change since making: have moved function serializer , instead override method: is_valid , works well. @ least it's not in view anymore.


Comments

Popular posts from this blog

How to connect android app to App engine -

gcc - MinGW's ld cannot perform PE operations on non PE output file -

php - display validation error message next to the textbox in codeigniter -