HTTP 请求方法

HTTP 协议有很多种请求方法。route默认使用GET方法,只响应GET请求。method参数可以给route()函数指定使用哪种方法。或用get()post()put()delete()等函数来代替route()函数。

 

POST 方法一般用于HTML 表单的提交。下面是一个使用POST 来实现用户登录的例子:

[root@jubottle]# cat login.py#!/usr/bin/envpython#coding=utf-8from bottle import run,get,post,request @get('/login')  #或者@route('/login'),默认是GET方法def login_form():    return '''    
    用户名:
    密码:  
    
    ''' @post('/login')  #或者@route('/login',method='POST'),POST方法要指定def login_submit():    name = request.forms.get('username')    passwd = request.forms.get('password')    return "

用户名:%s

密码:%s

" %(name,passwd) run(host='0.0.0.0',port=8000,debug=True) #开启服务,打开debug模式

 

打开浏览器访问:

username处输入:ju

password处输入:

 

点登录后网页显示:

 

在上例中使用POST方法时,使用request.forms方法获取相关的值,当从GET方法传递键值时,用 request.query方法来获取,例如:

[root@jubottle]# cat get_test.py#!/usr/bin/envpythonfrom bottle import run,get,request @get('/vars')def vars():    var1 = request.query.username    var2 = request.query.password    return "username=%s,password=%s"% (var1,var2) run(host='0.0.0.0',port=8000,debug=True)

打开浏览器访问:

 

特殊请求方法: HEAD ANY

HEAD 方法类似于 GET 方法,但服务器不会返回 HTTP 响应正文,一般用于获取 HTTP 原数据而不用下载整个页面。

非标准的ANY方法做为一个低优先级的fallback:在没有其它route的时候,监听ANY方法的route会匹配所有请求,而不管请求的方法是什么。这对于用做代理的route很有用,可将所有请求都重定向给子应用。

总之:HEAD 请求被响应GET请求的route来处理,响应 ANY 请求的 route 处理所有请求,但仅限于没有其它 route 来匹配原先的请求的情况。

 

静态文件映射

Bottle 不会处理像图片或CSS 文件的静态文件请求。你需要给静态文件提供一个route,一个回调函数(用于查找和控制静态文件的访问)

[root@jubottle]# cat static_test.py#!/usr/bin/envpythonfrom bottle import  static_file, route, run@route('/static/
')def server_static(filename):    return static_file(filename,root='/home/bottle/static')run(host='0.0.0.0',port=8000)

打开浏览器访问:

 

错误页面

如果页面出错,Bottle 会显示一个默认的错误页面,提供足够的debug 信息。你也可以使用error()函数来自定义你的错误页面:

from bottle import static_file,route,run,error@error(404)def error_page(error):    return '没有你还要访问的页面!'run(host='0.0.0.0',port=8000)

打开浏览器访问一个不存在的页面: