I'm quite new to django and I just can't figure out a way to upload a simple html file to django using requests.post(). I tried the steps given in this https://blog.vivekshukla.xyz/uploading-file-using-api-django-rest-framework/ but I keep getting a status 400 when I give
import requests
file_ob = open("/root/Desktop/sampletext.html", "rb")
print(file_ob)
payload = {
'remark1': 'hey',
'remark2': 'hello',
'File': file_ob
}
r = requests.post("http://127.0.0.1:8000/upload/files/", data=payload)
print(r.status_code)
models.py
class Files(models.Model):
remark1 = models.CharField(max_length=20)
remark2 = models.CharField(max_length=20)
File = models.FileField(blank=False, null=False)
views.py
class FileView(APIView):
parser_classes = (MultiPartParser, FormParser)
def post(self, request, *args, **kwargs):
file_serializer = FileSerializer(data=request.data)
if file_serializer.is_valid():
file_serializer.save()
return Response(file_serializer.data, status=status.HTTP_201_CREATED)
else:
return Response(file_serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def get(self, request):
files = Files.objects.all()
file_serializer = FileSerializer(files, many=True)
return Response(file_serializer.data, status=status.HTTP_200_OK)
serializers.py
class FileSerializer(serializers.ModelSerializer):
class Meta:
model = Files
fields = '__all__'
urls.py
urlpatterns=[
path('admin/', admin.site.urls),
path('upload/files/', FileView.as_view())
]
Here is the error I get from server:
Bad Request: /upload/files/
[12/May/2020 08:29:45] "POST /upload/files/ HTTP/1.1" 400 84
What am I doing wrong? Is there a better way to do this? I cant find any example online where requests.post()
was used. It's Postman everywhere.