使用查询参数上传文件和标题

时间:2017-07-11 22:31:14

标签: django python-3.x django-views django-rest-framework

我正在使用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))
]

我希望得到如下结果:

enter image description here

1 个答案:

答案 0 :(得分:1)

如果您想通过这样的网址发送数据,请使用查询参数而不是像这样修改网址正则表达式。

您的网址只是

url(r'^upload/$', MyAPIView.as_view())

在前端,您会在此网址中附加titlepath

localhost:8000/api/v1/upload?title=<your_title>&path=<your_file_path>

然后在您的视图中,您只需从request.query_params

中提取这些键值对即可

但我建议不要将此用于POST方法,您可以在request.data中发送所有这些数据。