2012-02-23 98 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