2012-02-23 11 views
4

현재 일부 API를 실험하고 있습니다. URL을 앱의 매개 변수로 사용하는 방법을 알고 싶습니다.Python webapp 동적 경로

http://www.myapp.com/myapp/jack 출력합니다 "안녕하세요 잭"

또는

http://www.myapp.com/myapp/john 출력합니다 "안녕하세요 존"

또는 http://www.myapp.com/myapp/john%20jack 출력합니다 "안녕하세요 존 잭"

I : 예를 들어, 이 기능을 찾을 수있는 몇 가지 포인터가 마음에 들어요. 나는 이것이 쉽다는 느낌을 가지고 있지만 나는 단지 그것을 이해할 수 없다. 그것은 내가 사용하고있는 프레임 워크에 의존 하는가? 나는 Python을 처음 사용하기 때문에 Django와 같은 용어를 사용하고있다. GAE의 번들로 제공되는 webapp 프레임 워크와 함께 Google App Engine에서 Python을 사용하고 있습니다. 당신은 당신이 나머지를 구문 분석 myapp에서 요청을받을 때와 같은 URL 패턴을 만들 수 있고,

import cgi 

from google.appengine.api import users 
from google.appengine.ext import webapp 
from google.appengine.ext.webapp.util import run_wsgi_app 

class MainPage(webapp.RequestHandler): 
    def get(self,url=None): 
    self.response.out.write("hello " + str(url)) 

application = webapp.WSGIApplication([ 
            (r'/(\w+)', MainPage) 
            ], 
            debug=True) 

def main(): 
    run_wsgi_app(application) 

if __name__ == "__main__": 
    main() 
+0

[Python 2.5] (http://code.google.com/appengine/docs/python) 시작 안내서부터 시작해야한다고 생각합니다./gettingstarted /) 또는 [Python2.7] (http://code.google.com/appengine/docs/python/gettingstartedpython27/)을 참조하십시오. 웹 응용 프로그램 프레임 워크와 App Engine 개념을 소개합니다. – Maxim

+0

파이썬 2.5에 대한 튜토리얼은 이미 끝났지 만 일반적으로 아직도 혼란 스럽다. 특정 URL을 매핑하는 방법을 알고 있지만 동적 인 것은 아닙니다. 나는 핵심 라인이'application = webapp.WSGIApplication ([(r '/ (\ w +)', RequestHandler)]'라는 것을 알아 냈다. 이제 % 20을 포함하고자 할 때 정규식을 체크 아웃 할 것이다. . –

+1

아, 질문을 편집 한 후 달성하고자하는 것이 무엇인지 분명하게 알 수 있습니다./myapp/(.*)'regex는 URL의/myapp /'다음에 나오는 문자의 순서와 일치합니다. 코드의 적절한 부분에 ...;) – Maxim

답변

3

웨이 :

이 현재 내가 지금 함께 일하고 있어요 코드입니다 url을 입력하고 메시지를 표시하십시오. 예를

파일 helloworld/app.yaml

application: helloworld 
version: 1 
runtime: python 
api_version: 1 

handlers: 
- url: /.* 
    script: helloworld.py 

파일 helloworld/helloworld.py

from google.appengine.ext import webapp 
from google.appengine.ext.webapp.util import run_wsgi_app 

class MainPage(webapp.RequestHandler): 
    def get(self, url=None): 
     self.response.headers['Content-Type'] = 'text/plain' 
     self.response.out.write('Happy New Year '+str(url)) 

#application = webapp.WSGIApplication(
#          [('/', MainPage)], 
#          debug=True) 

application = webapp.WSGIApplication([ 
            (r'/myapp/(?P<url>\d{4})/$', MainPage) 
            ], 
            debug=True) 

def main(): 
    run_wsgi_app(application) 

if __name__ == "__main__": 
    main() 

그래서 지금이에서 당신이 /myapp/ 표시 한 후 값을 얻을 수있는 당신이 /myapp/year/에서 요청을 모두 처리 할에 대한

그 해.

참고 : 긴 URL을 사용하면 자신이 어떻게 작동 할 것인지 아이디어를 얻을 수 있습니다.

+2

나는 아직도 그것을 알아 내려고 노력하고있다. 나는 [여기] (https://docs.djangoproject.com/en/1.3/intro/tutorial03/)와 [여기] (https://docs.djangoproject.com/en/dev/topics/http)를 보았다./urls/# url)하지만 ImportError가 계속 나오기 때문에 패턴에 대한 코드를 어디에 넣을 지 알 수 없습니다. 위에 게시 한 코드를 이미 사용하고 있습니다. 추가 또는 수정해야 할 부분이 있습니까? 어떤 도움이라도 대단히 감사하겠습니다! –

+0

이 코드를 사용해보고 숙제를하십시오. – Nilesh

+0

API가 작동 중입니다. 당신의 도움을 주셔서 감사합니다! –

0

나는 궁금해서 ?P<url> 태그가 정말로 필요합니까?

난 그냥 우리와 함께 공유

application = webapp.WSGIApplication([ 
            (r'/myapp(/.*)*?', MainPage) 
            ], 
            debug=True) 

감사 Lafada & 웨이 하오를 사용하여 문제를 해결할 수 있었다. 나는이 문제에 갇혀 있었고이 토론이 정말 도움이되었다는 것을 알았습니다.

+0

안녕하세요 Antoni! 하하는 우리 중 많은 사람들이이 질문에 매달려있는 것처럼 보입니다. 나에게 잘 작동하는 것은'r '/(.*)''이었고 괄호 뒤에'*? '가 필요하지 않았다. 또한, 내 초기 솔루션'r '/ (\ w +)''은 경로의 첫 단어 만 포착 할 수 있기 때문에 절대적으로 아닙니다. –

+0

나는 본다. 귀하의 명확한 설명에 감사드립니다. – Antoni