理解URL&URL的处理
任何网站最重要的部分就是它的URL结构。URL并不仅仅只是访问者能够看到和使用的,它还规定了你网站运行的核心模型。
web.py里面的url调用规则一般被定义在如下元组中
1 2 3 4 5 6 7 8 9 |
urls = ( "/tasks/?", "signin", "/tasks/list", "listing", "/tasks/post", "post", "/tasks/chgpass", "chgpass", "/tasks/act", "actions", "/tasks/logout", "logout", "/tasks/signup", "signup" ) |
下面是一个基本的url结构:
1 2 3 4 |
urls = ( '/', 'index' #这行表示我们要URL/(首页)被一个叫index的类处理。 ‘/user/(.?)’, 'user‘ #这行表示我们要URL/user/xxx被一个叫user的类处理。 ) |
- 第一部分是匹配URL的正则表达式,像/、/help/faq、/item/(\d+)(\d+将匹配数字)、/user/(.?)等(.?匹配0个或任意个字符)。圆括号表示捕捉对应的数据以便后面使用。
- 第二部分是接受请求的类名称,像index、view、welcomes.hello (welcomes模块的hello类),或者get_\1。\1 会被正则表达式捕捉到的内容替换,剩下来捕捉的的内容将被传递到你的函数中去。
写一个基本的程序
在开始web.py程序前,必须导入web.py模块
1 |
import web |
然后定义完们的url规则:
1 2 3 4 5 6 |
urls = ( "/", "Index", "/user", "User", "/admin", "Admin", "/list/(.?)", "List" ) |
现在我们需要创建一个列举这些url的application。
1 |
app = web.application(urls, globals()) |
这会告诉web.py去创建一个基于我们刚提交的URL列表的application。这个application会在这个文件的全局命名空间中查找对应类。
定义处理类:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
class index: def GET(self): return "I am index" class User: def GET(self): return "I am user" class Admin: def GET(self): admin = web.input() name = admin.get('name') if not admin: return "params error" if name is None or not name: return "params error" return "I am admin ,my name is " + admin.name class List: def GET(self, param): return "I am list" + param |
最后我们在来一句
1 |
if __name__ == "__main__": app.run() |
这会告诉web.py为我们启动上面我们写的应用。
让它跑起来
上面完整的代码如下,我们命名为:myapp.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
#!/usr/bin/env python # coding=utf-8 import web urls = ( "/", "index", "/user", "User", "/admin", "Admin", "/list/(.*)", "List" ) app = web.application(urls, globals()) class index: def GET(self): return "I am index" class User: def GET(self): return "I am user" class Admin: def GET(self): admin = web.input() name = admin.get('name') if not admin: return "params error" if name is None or not name: return "params error" return "I am admin ,my name is " + admin.name class List: def GET(self, param): return "I am list" + param if __name__ == "__main__": app.run() |
$python myapp.py 127.0.0.1:8888
就可以通过 http://127.0.0.1:8888访问你的程序
如:
http://127.0.0.1:8888/
http://127.0.0.1:8888/user
http://127.0.0.1:8888/admin
http://127.0.0.1:8888/admin?xxx=s
http://127.0.0.1:8888/admin?name=haha
http://127.0.0.1:8888/list/
http://127.0.0.1:8888/list/xxx
/list/(.?) 匹配0到任意个字符 ,括号内的字符会以一个参数传入,?后的查询语句需要用web.input获取
参考:
http://webpy.org/cookbook/url_handling
http://webpy.org/tutorial3.en
—完—
0 条评论