Я создаю API, который принимает файл и проверяет его, отправляет ответ json (не хранит файл в БД, поэтому модель не нужна).Я создал представление на основе классов, в функции post, request.FILES
или request.POST
не содержит файл ... Если я создаю класс формы, он будет работать.Но я не хочу никакого пользовательского интерфейса, это должен быть простой API.Кто-нибудь знает, как это сделать?
class ValidateView(View):
def get(self, request, *args, **kwargs):
pass
def post(self, request, *args, **kwargs):
file = request.FILES
if not file:
return JsonResponse({"status_code": "400", "message": "a file is required", "status_response": "Bad Request"})
return JsonResponse({"status_code": "200", "message": "data validated", "status_response": "Success"})
@csrf_exempt
def dispatch(self, request, *args, **kwargs):
return super(ValidateView, self).dispatch(request, *args, **kwargs)
Я использовал djangorestframework
и придумал это
class ValidateView(views.APIView):
parser_classes = (FileUploadParser,)
def post(self, request, filename, format=None):
file_obj = request.data['file']
if is_csv_valid(file_obj):
return Response(status=200, data={"message": "valid file"})
else:
return Response(status=400, data={"message": "not valid"})
Но здесь проблема в том, что я должен создать URL-адрес, подобный этому
re_path("validate/(?P<filename>[^/]+)$", ValidateView.as_view(), name="api-validate")
Если я исключу filename
в URL, он выдаст ошибку.Кроме того, file_obj
содержит некоторые дополнительные строки вместе с исходными данными, подобными этим.
[b'----------------------------634867545113999762020341\r\n', b'Content-Disposition: form-data; name=""; filename="kafka_word_count_input.txt"\r\n', b'Content-Type: text/plain\r\n', 'original_data']
Кто-то поможет !!!