我正在使用Django RestFramework。我想如果可以使用url参数上传文件和标题。例如,
http://127.0.0.1:8000/upload/title='some-title'&file_url='some-path'
任何人都可以指导,因为我是django rest framework的初学者。这是我的代码:
型号:
class MyModel(models.Model):
title = models.TextField(max_length=100, blank=True, default='No title', unique=True)
file_url = models.FileField(upload_to='files/')
created_at = models.DateTimeField(auto_now_add=True)
class Meta:
ordering = ('created_at',)
串行器:
class MySerializer(serializers.ModelSerializer):
file_url = serializers.FileField(max_length=None, required=True)
class Meta:
model = MyModel
fields = ('id', 'title', 'file_url', 'created_at')
查看:
class MyViewSet(ModelViewSet):
queryset = MyModel.objects.all()
serializer_class = MySerializer
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
class MyAPIView(generics.CreateAPIView):
serializer_class = MySerializer
permission_classes = (permissions.IsAdminUser,)
def get_queryset(self):
title = self.lookup_field['title']
file_path = self.lookup_field['file']
obj = MyModel.objects.create(title=title, file_url=file_path)
serializer = MySerializer(obj)
return Response(serializer.data)
的url:
router = DefaultRouter()
router.register(r'django', MyViewSet)
urlpatterns = [
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),
url(r'^upload/(>P<title>[\w+])&?P(<file>[\w+])/$', MyAPIView.as_view()),
url(r'^', include(router.urls))
]
我希望得到如下结果:
答案 0 :(得分:1)
如果您想通过这样的网址发送数据,请使用查询参数而不是像这样修改网址正则表达式。
您的网址只是
url(r'^upload/$', MyAPIView.as_view())
在前端,您会在此网址中附加title
和path
localhost:8000/api/v1/upload?title=<your_title>&path=<your_file_path>
然后在您的视图中,您只需从request.query_params
但我建议不要将此用于POST
方法,您可以在request.data
中发送所有这些数据。