A-A+

python bottle 框架基础教程:HTTP 请求方法

2015年05月24日 bottle 评论 1 条 阅读 10,016 views 次

在看这篇文章之前,我建议先看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代码示例:

  1. [root@linuxyw bottle]# vim main.py 
  2. #/usr/bin/env python
  3. #coding=utf-8
  4. #这里需要额外导入 request 方法
  5. from bottle import route, run ,request
  6. @route('/login')
  7. def login():
  8.         '''
  9.         这里不指定方法时,默认就是GET方法
  10.         登陆页面,html代码都是直接从这里返回到网页中去的,如果不带任何方法,此函数将响应
  11.         关于模板的使用,后面课程会讲到
  12.         '''
  13.         return '''
  14.         <html>
  15.         <head>
  16.         </head>
  17.         <body>
  18.         <form action="/login" method="post">
  19.             Username: <input name="username" type="text" />
  20.             Password: <input name="password" type="password" />
  21.             <input value="Login" type="submit" />
  22.         </form>
  23.         </body>
  24.         </html>
  25.     '''
  26. @route('/login', method='POST')
  27. def do_login():
  28.         '''
  29.         函数名字随意定,这里是进行POST动作的,所以用了do_login,函数名不能与前后函数有同名
  30.         登陆动作,这里用了post,也就是当访问login页面,同时带了POST请求时,这个函数将响应
  31.         '''
  32.         username = request.forms.get('username')
  33.         password = request.forms.get('password')
  34.         return '<p>帐号:%s</p><p>密码:%s</p>' %(username,password)
  35. run(host='0.0.0.0', port=8080, debug=True)   #开启服务

 

打开浏览器访问:http://linuxyw.com:8080/login

bottle post方法

bottle post方法

 

在username处输入:drfdai

在password处输入:www.linuxyw.com

 

点login后网页显示:

bottle post登陆效果

bottle post登陆效果

 

特殊请求方法: 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方法来获取,如下代码

  1. @route('/info')
  2. def info():
  3.     '''这里默认是GET方法,id,name,age将从url里获取,然后返回到网页内容中'''
  4.     id = request.query.id
  5.     name = request.query.name
  6.     age = request.query.age
  7.     return "id=%s,name=%s,age=%s" % (id,name,age)

 

在浏览器中访问:http://linuxyw.com:8080/info?id=12&name=drfdai&age=30

get获取参数值

get获取参数值

 

当使用POST方法时, request.forms方法获取相关的值,如上刚才的登陆代码:

  1. @route('/login', method='POST')
  2. def do_login():
  3.     username = request.forms.get('username')
  4.     password = request.forms.get('password')
  5.     return '<p>帐号:%s</p><p>密码:%s</p>' %(username,password)

这些参数是从HTML表单里传递过来的,如我们在HTML里,定义了表单的方法是post,input的name是usernamepassword

  1. <form action="/login" method="post">
  2.             Username: <input name="usernametype="text" />
  3.             Password: <input name="passwordtype="password" />
  4.             <input value="Login" type="submit" />
  5.         </form>

如果你对HTML不熟悉,请先去学习下HTML,这里将不对HTML作更多的解释

关键词:

1 条留言  访客:0 条  博主:0 条   引用: 1 条

来自外部的引用: 1 条

  • python bottle框架(WEB开发、运维开发)教程 | linux系统运维

给我留言

Copyright © linux系统运维 保留所有权利.   Theme  Ality 粤ICP备13023035号-1

用户登录

分享到: