代码改变世界

使用bottle进行web开发(8):get的参数传递,form里的额数据传递等

2017-06-20 14:26  很大很老实  阅读(1920)  评论(0编辑  收藏  举报

1.诸如:forum?id=1&page=5这样的,在bottle里,可以通过request.query来访问这些值,举例如下;

from bottle import Bottle,run,request,template

app=Bottle()

@app.route('/forum')
def display_forum():
    formid=request.query.id
    pageid=request.query.page or '1'
    return template('Forum ID:{{id}} (page {{pageid}})',id=formid,pageid=pageid)

run(app,host='127.0.0.1',port='3333')

这里,bottle内部关键的一点,是使用了FormsDict类。

2.html的<form>处理:

假设,在html文件里,有这么一个东西:

<form action="/login" method="post">
    Username:<input name="username" type="text"/>
    Password:<input name="password" type="password"/>
    <input value="Login" type="submit"/>
</form>

这里的action,指出通过url从form data中获得数据的过程,可以使用http的get或者post。

如果是get,则这些值就显性的在url里出现,并且可以通过上面的例子里的BaseRequest.query来获取。

这里,我们采用post方式。这个时候,数据就存在BaseRequest.forms中(参考FormsDict)

具体代码如下:

@app.route('/login')
def login():
    return '''<form action="/login" method="post">
    Username:<input name="username" type="text"/>
    Password:<input name="password" type="password"/>
    <input value="Login" type="submit"/>
</form>'''

@app.route('/login',method='POST')
def do_login():
    username=request.forms.get('username')
    password=request.forms.get('password')
    return template("<p>login name is :{{username}} and password is :{{password}}</p>",username=username,password=password)

run(app,host='127.0.0.1',port='3333')

还有其他的方式来或许form里的数据,这里列举如下;