1. 程式人生 > >使用bottle進行web開發(1):hello world

使用bottle進行web開發(1):hello world

matches 動態 bsp allow 模塊 開發 code spec converter

為什麽使用bottle?因為簡單,就一個py文件,和其他模塊沒有依賴,3000多行代碼。

http://www.bottlepy.org/docs/dev/

既然開始學習,就安裝它吧。

pip3 install bottle

ok

第一個代碼:

from bottle import route,run,template

@route(/hello/<name>)
def index(name):
    return template(<b>Hello {{name}}</b>!,name=name)

run(host=localhost,port=8080)

運行ok

從這段代碼可以i看出來,bottle雖小,支持不差,包括route,template等,都支持。

而最後一行代碼的run,實際上,就是啟動一個內置的web server。3000多行代碼,還包括一個這個,厲害。

處於簡單的目的,我們後續學習,大部分時候,都是用一個module-level的裝飾器route()去定義路由。這會把routes都加入到一個全局的缺省程序,當第一次調用route()的時候,Bottle的一個進程會被創建。

實際上,更應該代碼是這樣的;

from bottle import Bottle, run
app = Bottle()
@app.route(
/hello) def hello(): return "Hello World!" run(app, host=localhost, port=8080)

上面的,route基本都是靜態的,下面,我們介紹動態路由:

動態路由相對靜態路由來說,用的更廣泛,一次性匹配更多的url:

比如/hello/<name>可以匹配:/hello/wcf /hello/hanyu /hello/whoami 但是不匹配:/hello /hello/ /hello/wcf/ddd

舉例如下;

@route(/wiki/<pagename>) # matches /wiki/Learning_Python
def show_wiki_page(pagename):
...
@route(
/<action>/<user>) # matches /follow/defnull def user_api(action,

這裏,還需要關註動態路由的Filters(我稱之為匹配器,目前有4種,可以增加更多),具體是:

:int matches (signed) digits only and converts the value to integer.
? :float similar to :int but for decimal numbers.
? :path matches all characters including the slash character in a non-greedy way and can be used to match more
than one path segment.
? :re allows you to specify a custom regular expression in the config field. The matched value is not modified

舉例

from flask import Flask

app = Flask(__name__)

@app.route(/user/<int:user_id>
def user(user_id):
    return Hello,%d %user_id

if __name__ == __main__:
    app.run(debug=True)
#coding:utf-8

from flask import Flask
from werkzeug.routing import BaseConverter

#定義正則轉換器的類
class RegexConverter(BaseConverter):
    def __init__(self,url_map,*items):
        super(RegexConverter, self).__init__(url_map)
        self.regex=items[0]

app = Flask(__name__)
#實例化
app.url_map.converters[regex]=RegexConverter

@app.route(/user/<regex("([a-z]|[A-Z]){4}"):username>, methods=[POST, GET])
def user(username):
    return Hello,%s % username

if __name__ == __main__:
    app.run(debug=True)

代碼如下;

使用bottle進行web開發(1):hello world