使用bottle進行web開發(1):hello world
為什麽使用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