arn*_*rnm 6 python django oauth oauth-2.0 django-rest-framework
我正在使用 DjangoRestFramework 来制作 API。目前我有 OAuth2 身份验证工作,这意味着我可以生成一个有效的访问令牌来使用 API。
如何上传用户文件?我需要上传一个文件并将其与上传它的用户相关联。
我目前正在尝试这样做
api/views.py:
class FileUploadView(APIView):
parser_classes = (FileUploadParser,)
def put(self, request, filename, format=None):
file_obj = request.FILES['file']
# do stuff
return Response(status=204)
Run Code Online (Sandbox Code Playgroud)
api/urls.py 包含这一行:
url(r'^files/', 'api.views.FileUploadView'),
Run Code Online (Sandbox Code Playgroud)
但是当我尝试上传文件时,我收到一条错误消息:
'CSRF verification failed. Request aborted'
'Reason given for failure: CSRF cookie not set'
Run Code Online (Sandbox Code Playgroud)
当我尝试这个 curl 命令时:
curl -XPUT http://localhost:8000/files/ -H 'Authorization: Bearer some_access_token' -F filedata=@localfile.txt
Run Code Online (Sandbox Code Playgroud)
这是我的 REST_FRAMEWORK 默认值:
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': ('rest_framework.permissions.IsAdminUser',),
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.OAuth2Authentication',
)
}
Run Code Online (Sandbox Code Playgroud)
1) 在我的原始代码中,我期望文件名参数进入我的视图,但我没有从 urls.py 中的 url 中解析它。它应该看起来像这样:
url(r'^uploads/(?P<filename>[\w.]{0,256})/$', views.UploadsView.as_view()),
2)我也没有提供 APIView 作为视图。如果你注意到上面我特意调用了 .as_view() 方法。
通过上述修复和实现 POST 而不是 PUT 我的代码按预期工作。这是我当前的 APIView:
class UploadsView(APIView):
parser_classes = (FileUploadParser,)
permission_classes = (permissions.IsAuthenticated,)
def post(self, request, format=None):
file_obj = request.FILES['file']
print("FILE OBJ: ", file_obj)
return Response(status=201)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4626 次 |
| 最近记录: |