2012-02-23 97 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打印出 「你好,約翰插孔」

我我想知道在哪裏可以找到這個功能。我有一種感覺,這很容易,但我無法理解它。它依賴於我正在使用的框架嗎?我對Python非常陌生,所以我仍然接受Django和類似的東西。我在GAE的捆綁webapp框架上使用Google App Engine上的Python。

這是目前我現在有工作代碼:

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概念介紹webapp框架。 – Maxim 2012-02-23 09:28:13

+0

我已經閱讀了Python 2.5的教程,但通常我仍然感到困惑。我知道如何映射特定網址,但不知道它是何時動態顯示的。我設法弄清楚了關鍵的一行是'application = webapp.WSGIApplication([(r'/(\ w +)',RequestHandler)]'現在我檢查了正則表達式,當我想包含%20 – 2012-02-23 09:58:28

+1

啊,在你編輯你的問題後,你想要達到什麼更清晰,'/ myapp /(.*)'正則表達式匹配URL的'/ myapp /'部分後的任何字符序列,所以現在試着放置它進入您的代碼的適當部分...;) – Maxim 2012-02-23 10:52:32

回答

3

衛,

你必須創建當你在myapp請求你將解析其餘像一個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/year/要求所以從這個您有/myapp/和展示後獲得的價值那一年。

注意:長URL做你自己,所以你會明白它將如何工作:)。

+2

我仍然試圖弄清楚。我看過[這裏](https://docs.djangoproject.com/en/1.3/intro/tutorial03/)和[這裏](https://docs.djangoproject.com/zh/dev/topics/http/url /#url),但我無法弄清楚爲模式添加代碼的原因,因爲我不斷收到ImportError。我已經在使用上面發佈的代碼了。有什麼我需要添加或編輯?任何幫助將不勝感激! – 2012-02-23 08:58:05

+0

試試這個代碼,並做你的功課。 – Nilesh 2012-02-23 13:12:17

+0

我有API的工作。謝謝你的幫助! – 2012-02-23 16:07:06

0

我只是好奇,?P<url>標籤真的需要嗎?

我設法通過只使用

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

感謝Lafada &偉豪與我們分享解決問題。我被困在這個問題以及我發現這個討論真的有幫助:)

+0

嗨安東尼!哈哈似乎很多人都被困在這個問題上。那麼對我來說''r'/(.*)''',你甚至不需要括號後面的'*?'。另外,我的初始解決方案'r'/(\ w +)'並不是萬無一失的,因爲它只能捕獲路徑中的第一個單詞。 – 2012-02-28 16:16:43

+0

我明白了。非常感謝您的澄清! – Antoni 2012-03-05 16:40:54