python
  • django
  • azure
  • 2013-09-04 2 views 1 likes 
    1

    중국에서 weibo라는 "twitter"와 같은 웹 사이트에서 "짹짹"을 얻기 위해 장고 코드를 작성했습니다. 태스크). 이 코드 조각은 로컬 컴퓨터의 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) 
    

    을하지만 (는 IIS 8.0 웹 서버에 호스트) 내 윈도우 Azure 웹 사이트의 웹 사이트를 배포 한 후에 문제는 다음과 같습니다

    코드 조각이 좋아한다. 함수 호출 request.get_full_path()가 작동하지 않고 "weibo/authsucc.html"을 반환했지만 실제 요청은 "http://lifein.azurewebsites.net/weibo/authsucc.html?code=08e69b6acb825029f4fa5af1f7ed394d"입니다. 장고의 디버그 모드에서 로컬 변수를 검사했습니다. 그것의 부품 :

    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"을 반환합니다. 이 문제를 해결하는 방법을 궁금해. 누구든지 나를 도울 수 있을까?

    답변

    1

    질의 문자열은 URI의 경로가 아닙니다. 따라서 관찰 된 행동은 정확합니다. 그것은 새로운 질문을 만듭니다. django.core.handlers.wsgi에서 전체 uri를 얻는 방법입니다 .SSGIR 개체를 요청하십시오. 논리적 대답은 다음과 같습니다 :

    uri = '%s?%s' % (request.get_full_path, request.QUERY_STRING) 
    

    이것은 재구성으로 생성되지만 http 요청을 수행하는 데 사용 된 정확한 URI를 제공하지는 않습니다. 예를 들어/path// path /를 구별 할 수있는 방법이 없습니다. .

    확인하려면 원시 http 요청에 직접 액세스해야합니다. 나는 아직 이것을 할 수 없었다. 나는 일하는 대답을 찾을 때 업데이트 할 것입니다.

    +0

    아마도 버전에 따라 다르 겠지만 request.get_full_path()에는 1.6까지의 문서에 따라 쿼리 매개 변수가 있습니다 (문서가 보관 처리 됨) – ThatsAMorais

    관련 문제