中国のweiboと呼ばれる「twitter」のようなWebサイトから「ツイート」を取得するDjangoコードを作成しました(実際、問題はこのタスクとは関係ありません)。このコードは、ローカル コンピューターの Django テスト Web サーバー (コマンドで開始) で適切に実行されますpython manage.py runserver
。
コード部分は次のようになります。
def authsucc(request):
APP_KEY = '5032*****'
APP_SECRET = '367362***************'
CALLBACK_URL = 'http://lifein.azurewebsites.net/weibo/authsucc.html'
client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=CALLBACK_URL)
r = client.request_access_token(request.build_absolute_uri()[-32:])
#return HttpResponse(request.get_full_path())
access_token = r.access_token
expires_in = r.expires_in
client.set_access_token(access_token, expires_in)
r = client.statuses.user_timeline.get()
resp = ""
for st in r.statuses:
resp += st.text + "<br/>"
return HttpResponse(resp)
しかし、問題は、Windows Azure Web サイト (IIS 8.0 Web サーバー上のホスト) に Web サイトを展開した後です。関数呼び出しは機能request.get_full_path()
せず、実際の要求は " http://lifein.azurewebsites.net/weibo/authsucc.html?code=08e69b6acb825029f4fa5af1f7ed394d " ですが、"weibo/authsucc.html" を返すだけです。Django のローカル変数を確認しましたデバッグモード。その一部:
request
"<WSGIRequest\npath:/weibo/authsucc.html,\n
GET:<QueryDict: {}>,\n
POST:<QueryDict: >{}>,\n
'HTTP_HOST': 'lifein.azurewebsites.net',\n
'HTTP_X_ORIGINAL_URL': '/weibo/authsucc.html?code=08e69b6acb825029f4fa5af1f7ed394d',\n
'IIS_UrlRewriteModule': '7.1.0761.0',\n
'IIS_WasUrlRewritten': '1',\n
'PATH_INFO': u'/weibo/authsucc.html',\n
'PATH_TRANSLATED':'C:\\\\DWASFiles\\\\Sites\\\\LifeIn\\\\VirtualDirectory0\\\\site\\\\wwwroot\\\\handler.fcgi\\\\weibo\\\\authsucc.html',\n
'QUERY_STRING': '',\n
'REQUEST_METHOD': 'GET',\n
'REQUEST_URI': '/weibo/authsucc.html?code=08e69b6acb825029f4fa5af1f7ed394d',\n 'SERVER_SOFTWARE': 'Microsoft-IIS/8.0',\n
'UNENCODED_URL': '/weibo/authsucc.html?code=08e69b6acb825029f4fa5af1f7ed394d',\n
'URL': '/handler.fcgi',\n
'wsgi.errors': <cStringIO.StringO object at 0x010392A0>,\n
'wsgi.input': <cStringIO.StringI object at 0x012C9458>,\n
'wsgi.multiprocess': True,\n
'wsgi.multithread': False,\n
'wsgi.run_once': False,\n
'wsgi.url_scheme': 'http',\n
'wsgi.version': (1, 0)}>"
リクエストの「REQUEST_URI」および「HTTP_X_ORIGINAL_URL」属性が正しく設定されていることがわかりますが、GET QueryDict は空です。はrequest.get_full_path()
、ローカル サーバーで除外された "/weibo/authsucc.html?code=08e69b6acb825029f4fa5af1f7ed394d" の代わりに "/weibo/authsucc.html" を返します。この問題をどのように解決するのだろうか。誰でも私を助けることができますか?