0
メディアファイルの要求を処理するカスタムビューを作成するときに問題が発生しました。私はそれをカスタマイズして、カスタムの権限チェックと上書きを行うことができるようにしました。ファイルを取得するときにdjangoビューがHttpResponseオブジェクトを返さない
url(r'^media/(?P<path>.*)$', views.document_view, {'document_root': settings.MEDIA_ROOT}),
@login_required
def document_view(request, path, document_root):
name = os.path.join(settings.MEDIA_ROOT, path)
if not os.path.isfile(name):
raise Http404("File not found.")
if request.user.is_staff:
print "staff"
serve_document(request, path)
else:
print "FORBIDDEN"
raise PermissionDenied
def serve_document(rcvd_request, path):
print "Send " + path
# set PRIVATE_MEDIA_USE_XSENDFILE in your deployment-specific settings file
# should be false for development, true when your webserver supports xsendfile
# This is currently zero
if settings.PRIVATE_MEDIA_USE_XSENDFILE:
response = HttpResponse(mimetype='application/force-download')
response['X-Accel-Redirect'] = filename # Nginx
response['X-Sendfile'] = filename # Apache 2 with mod-xsendfile
del response['Content-Type'] # let webserver regenerate this
return response
else:
print "Fallback serve"
# fallback method
return serve(rcvd_request, path, settings.MEDIA_ROOT)
return serve(request, path, path, settings.MEDIA_ROOT)
私がリンクされたファイルを持っているリンクをクリックすると、私はインクルードは、右のパスで呼び出さ奉仕知っているので、これはあまり意味がありません
The view portal.views.dashboard.document_view didn't return an HttpResponse object. It returned None instead.
、ファイルを取得実際には、スタッフチェックのない以前のバージョンでファイルをダウンロードしていました。 デフォルトでは、インデントと機能が[なし]で終了するために問題が発生していますが、これは当てはまりません。
私はそれを考え出したかもしれないと思います。私がserve_document関数を呼び出すと、serve_documentの戻り値が先頭に伝播しないので、returnを追加する必要があります – user8734958