0

djangoを使用して認証済みの画像を提供しています。画像はログインが必要なビューの背後にあり、最終的には認証だけでなく多くのことをチェックする必要があります。ここで説明するのが複雑な理由により、画像に実際のURLを使用することはできませんが、認証されたビューにつながるカスタムURLを使用して提供しています。

Javaから、保存または表示するには、画像が到達可能である必要があります。この部分では、Apachehttpclientを使用します。

Apacaheで私は多くのことを試しましたが(すべての例と例の組み合わせ...)、それを機能させることができないようです。Webアプリの他の部分には、java(およびcとcurl)から正常に接続したdjango-rest-framworkを使用します。

djangoでlogin_reuiredデコレータを使用します。これにより、最初にログインページへのURLリダイレクトを取得しようとします。

リンクとWebビューアでのログインを試みると、サーバーコンソールに200コード(OK)が表示されます。httpclientでリンクを試してみると、コンソールに302が見つかりました...(302を検索すると、リダイレクトを意味します。)

これは私がdjangoで行うことです:

urls.py:

url(r'^photolink/(?P<filename>.*)$', 'myapp.views.photolink',name='photolink'),

views.pyで:

import mimetypes
import os

@login_required
def photolink(request, filename):
    # from the filename I get the image object, for this question not interesting
    # there is a good reason for this complicated way to reach a photo, but not the point here
    filename_photo = some_image_object.url
    base_filename=os.path.basename(filename_photo)
    # than this is the real path and filename to the photo:
    path_filename=os.path.join(settings.MEDIA_ROOT,'photos',mac,base_filename)
    mime = mimetypes.guess_type(filename_photot)[0]
    logger.debug("mimetype response = %s" % mime)
    image_data = open(path_filename, 'rb').read()
    return HttpResponse(image_data, mimetype=mime)

ちなみに、これを機能させるには、他のテストに合格するために別のデコレータが必要です。しかし、最初にこれを機能させる必要があります。

今のところ、それは安全なURLではありません....プレーンhttp。

Javaでは、多くのことを試しました...apacheのhttpclient4.2.1プロキシ、Cookie、認証ネゴシエーション、フォローリダイレクトなどを使用しています...など...

ここでいくつかの基本的なことを見落としていますか?...ウェブサイトクライアントのログインは自動ログインには適していないようです...

そのため、問題はdjangoのコードまたはJavaコードにある可能性があります。

4

1 に答える 1

0

結局のところ、問題はHTTP認証を使用することでした。これは、login_requiredデコレータではデフォルトでは使用されません。

HTTP認証をチェックするカスタムデコレータを追加することでうまくいきました。

この例を参照してください:http://djangosnippets.org/snippets/243/

于 2013-03-04T14:28:48.293 に答える