2017-05-31 6 views
0

私はDjango RESTの新機能です。過度に難しいとは思わないものを達成するための時間を無駄にしています。Django RESTビュー:モデルのない画像を返します

ビューの定義済みのDjangoクラスを使用してビューを定義したいとします。このビューには、ので、このようなURLが画像example.pngを返します(その名前を与えられた)画像を返す必要があります:

http://localhost:8000/api/v1/image/example.png 

私はこのイメージをモデルに格納する必要はありませんが(それが中に格納されますサーバーをpngファイルとして)。クラスrest_framework.generics.RetrieveAPIViewは、画像へのアクセスを制限するアクセス許可と認証クラスを設定できるため、私のニーズに合っているようですが、画像があるモデルを持っていないとquerysetを設定する方法がわかりません。

これに関するご意見はありますか?ありがとうと私の無知を許してください。

+0

DRFが何を持っている何これと全く同じですか?それはサーバから画像を取得しているように聞こえます – e4c5

+0

ちょうどその目的のためにdjangoのビューが必要なnginxでそれを提供する? –

+0

私はDRFを使用した他のビューを持っており、そのビューにアクセス許可と認証クラス(JWTを使用)を設定する必要があります。私はDRFがこれをうまくやっていると思います。シンプルなDjangoビューを使用することをお勧めしますか?そのような場合に画像を所有していないユーザーへのアクセスを制限することはできますか? – GLR

答えて

2

私がよく理解していれば、画像へのアクセスを許可する前に許可をチェックしたいと思っています。

私はあなたがデシベルモデルに縛られないようGeneric Viewsがあなたのために良いパスであるとは思わない:

RESTフレームワークが提供する汎用ビューは、あなたが密接にマップ迅速 ビルドAPIビューすることができますデータベースモデル。

より良いパスがClass Based Views可能性があり、Ivan Semochkinによって示唆されているように、のようなもの:もちろん

class GetMyImage(APIView): 
    authentication_classes = (...,) 
    permission_classes = (...,) 

    def get(self, request, format=None): 
     with open('file path...') as fh: 
      return HttpResponse(fh.read(), content_type='content/image') 

はあなたのurls.pyを忘れないでください:

urlpatterns = [ 
    url(r'^image/example.png$', views.GetMyImage.as_view()), 
] 
0

HttpResponseを使用すると、単純なjsonデータを返すことができます。ビュークラスでgetメソッドをオーバーライドしてください。

import json 

from django.http import HttpResponse 

response_data = {} 
response_data['image'] = 'http://localhost:8000/api/v1/image/example.png' 

return HttpResponse(json.dumps(response_data), content_type="application/json") 
0

Djangoは、ルートメディアフォルダを指定したすべてのメディアファイルを保存します。また、指定されたルートメディアURLからサービスを提供します。

設定で追加します。

MEDIA_ROOT = os.path.join(BASE_DIR, 'media/') 
MEDIA_URL = '/media/' 

イメージルート設定のURLにあなたが追加した場合、ファイルは「http://localhost:8000/media/」で利用可能になります。

urlpatterns = [ 
    url(r'^api/v1/', include('api.urls', namespace='api')), 
]+static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 

は、構成設定と静的メソッドをインポートすることを忘れないでください:

from django.conf import settings 
from django.conf.urls.static import static 
関連する問題