Я написал фрагмент кода Django для получения «твитов» с веб-сайта, такого как «twitter», который называется weibo в Китае. (Действительно, проблема не связана с этим задача). Этот фрагмент кода работает правильно на моем локальном компьютере тестовый веб-сервер Django (запущен командой: python manage.py runserver
).Django WSGIRequest.get_full_path() не возвращает полный URI
Код кусок любит это:
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 (Host на IIS 8.0 веб-сервер). Вызов функции request.get_full_path()
не работал и просто возвращает «weibo/authsucc.html», в то время как фактический запрос «http://lifein.azurewebsites.net/weibo/authsucc.html?code=08e69b6acb825029f4fa5af1f7ed394d» Я проверил локальный var в режиме отладки 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» вместо «/weibo/authsucc.html?code=08e69b6acb825029f4fa5af1f7ed394d» на локальном сервере. Интересно, как решить эту проблему. Может ли кто-нибудь мне помочь?
Вероятно, это зависит от версии, но request.get_full_path() имеет в нем параметры запроса в соответствии с документами еще в 1.6 (чьи документы заархивированы) – ThatsAMorais