在看这篇文章之前,我建议先看bottle官方文档,可者在SVN下载中文文档
官方文档:http://www.bottlepy.org/docs/dev/index.html
SVN请跳转至:教程总目录
这些代码已提交到SVN中,有需要的朋友可在SVN下载
HTTP 协议定义了多个 请求方法 来满足不同的需求。所有 route 默认使用 GET 方法,只响应 GET 请
求。可给 route() 函数指定 method 参数。或用 get() , post() , put() 或 delete() 等函数来代替
route() 函数。
POST请求方法示例
下面是一个简单的用户登陆POST代码示例:
- [root@linuxyw bottle]# vim main.py
- #/usr/bin/env python
- #coding=utf-8
- #这里需要额外导入 request 方法
- from bottle import route, run ,request
- @route('/login')
- def login():
- '''
- 这里不指定方法时,默认就是GET方法
- 登陆页面,html代码都是直接从这里返回到网页中去的,如果不带任何方法,此函数将响应
- 关于模板的使用,后面课程会讲到
- '''
- return '''
- <html>
- <head>
- </head>
- <body>
- <form action="/login" method="post">
- Username: <input name="username" type="text" />
- Password: <input name="password" type="password" />
- <input value="Login" type="submit" />
- </form>
- </body>
- </html>
- '''
- @route('/login', method='POST')
- def do_login():
- '''
- 函数名字随意定,这里是进行POST动作的,所以用了do_login,函数名不能与前后函数有同名
- 登陆动作,这里用了post,也就是当访问login页面,同时带了POST请求时,这个函数将响应
- '''
- username = request.forms.get('username')
- password = request.forms.get('password')
- return '<p>帐号:%s</p><p>密码:%s</p>' %(username,password)
- run(host='0.0.0.0', port=8080, debug=True) #开启服务
打开浏览器访问:http://linuxyw.com:8080/login
在username处输入:drfdai
在password处输入:www.linuxyw.com
点login后网页显示:
特殊请求方法: HEAD 和 ANY
HEAD 方法类似于 GET 方法,但服务器不会返回 HTTP 响应正文,一般用于获取 HTTP 原数据而不用下载整个页面。 Bottle 像处理 GET 请求那样处理 HEAD 请求,但是会自动去掉 HTTP 响应正文。你无需亲自处理 HEAD 请求。另外,非标准的 ANY 方法做为一个低优先级的 fallback:在没有其它 route 的时候,监听 ANY 方法的route 会匹配所有请求,而不管请求的方法是什么。这对于用做代理的 route 很有用,可将所有请求都重定向给子应用。
总而言之: HEAD 请求被响应 GET 请求的 route 来处理,响应 ANY 请求的 route 处理所有请求,但仅限于没有其它 route 来匹配原先的请求的情况。就这么简单。
查询变量
当从GET方法传递键值时,用 request.query方法来获取,如下代码
- @route('/info')
- def info():
- '''这里默认是GET方法,id,name,age将从url里获取,然后返回到网页内容中'''
- id = request.query.id
- name = request.query.name
- age = request.query.age
- return "id=%s,name=%s,age=%s" % (id,name,age)
在浏览器中访问:http://linuxyw.com:8080/info?id=12&name=drfdai&age=30
当使用POST方法时, request.forms方法获取相关的值,如上刚才的登陆代码:
- @route('/login', method='POST')
- def do_login():
- username = request.forms.get('username')
- password = request.forms.get('password')
- return '<p>帐号:%s</p><p>密码:%s</p>' %(username,password)
这些参数是从HTML表单里传递过来的,如我们在HTML里,定义了表单的方法是post,input的name是username和password
- <form action="/login" method="post">
- Username: <input name="username" type="text" />
- Password: <input name="password" type="password" />
- <input value="Login" type="submit" />
- </form>
如果你对HTML不熟悉,请先去学习下HTML,这里将不对HTML作更多的解释
来自外部的引用: 1