<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                {% raw %} # Bottle 教程 > 原文: [http://zetcode.com/python/bottle/](http://zetcode.com/python/bottle/) Bottle 教程展示了如何使用 Python Bottle Web 微框架在 Python 中創建簡單的 Web 應用。 ## Bottle Bottle 是用于 Python 的快速,簡單且輕量級的 WSGI 微型網絡框架。 它作為單個文件模塊分發。 除 Python 標準庫外,沒有其他依賴項。 Web 服務器網關接口(WSGI)是 Web 服務器的簡單調用約定,用于將請求轉發到以 Python 編程語言編寫的 Web 應用或框架。 ## Bottle 安裝 ```py $ sudo pip3 install bottle ``` 我們使用`pip3`工具安裝 Bottle。 ## Bottle 簡單的例子 在下面的示例中,我們創建一個簡單的 Bottle 應用。 ```py $ mkdir simple && cd simple $ touch simple.py ``` 我們創建一個項目目錄一個 Python 文件。 `simple.py` ```py #!/usr/bin/env python3 from bottle import route, run @route('/message') def hello(): return "Today is a beautiful day" run(host='localhost', port=8080, debug=True) ``` 該示例向客戶端發送一條消息。 ```py from bottle import route, run ``` 我們導入`route`裝飾器和`run`函數。 `route`裝飾器用于將函數綁定到請求 URL。 `run`函數啟動服務器實例。 默認情況下,它是開發服務器。 ```py @route('/message') def hello(): return "Today is a beautiful day" ``` 使用`@route()`裝飾器,我們定義了一個路由。 路由是 URL 與 Web 服務器函數之間的映射。 在我們的例子中,該函數返回一條簡單的文本消息。 ```py run(host='localhost', port=8080, debug=True) ``` 我們以調試模式在端口 8080 上啟動服務器。 ```py $ ./simple.py Bottle v0.12.13 server starting up (using WSGIRefServer())... Listening on http://localhost:8080/ Hit Ctrl-C to quit. ``` 我們啟動開發服務器。 ```py $ curl localhost:8080/message Today is a beautiful day ``` 我們使用`curl`工具創建一個請求。 服務器以一條簡單消息響應。 ## Bottle JSON 響應 Web 應用通常以 JSON 格式發送響應。 Bottle 自動將 Python 字典轉換為 JSON。 `json_response.py` ```py #!/usr/bin/env python3 from bottle import route, run @route('/cars') def getcars(): cars = [ {'name': 'Audi', 'price': 52642}, {'name': 'Mercedes', 'price': 57127}, {'name': 'Skoda', 'price': 9000}, {'name': 'Volvo', 'price': 29000}, {'name': 'Bentley', 'price': 350000}, {'name': 'Citroen', 'price': 21000}, {'name': 'Hummer', 'price': 41400}, {'name': 'Volkswagen', 'price': 21600} ] return dict(data=cars) run(host='localhost', port=8080, debug=True) ``` 該應用將有關汽車的數據作為 JSON 發送到客戶端。 ```py return dict(data=cars) ``` Bottle 將 Python 字典轉換為 JSON。 ```py $ curl localhost:8080/cars {"data": [{"name": "Audi", "price": 52642}, {"name": "Mercedes", "price": 57127}, {"name": "Skoda", "price": 9000}, {"name": "Volvo", "price": 29000}, {"name": "Bentley", "price": 350000}, {"name": "Citroen", "price": 21000}, {"name": "Hummer", "price": 41400}, {"name": "Volkswagen", "price": 21600}]} ``` 我們收到一個命名的 JSON 數組。 ## Bottle 獲取請求 HTTP GET 方法請求指定資源的表示形式。 在 Bottle 中,我們可以使用`@route`或`@get`裝飾器映射 GET 請求。 從`request.query`檢索數據。 GET 請求通常是默認的請求方法。 `get_request.py` ```py #!/usr/bin/env python3 from bottle import route, run, request, get @get('/msg') def message(): name = request.query.name age = request.query.age return "{0} is {1} years old".format(name, age) run(host='localhost', port=8080, debug=True) ``` 該應用根據 GET 請求的數據構建一條消息。 ```py @get('/msg') def message(): ``` `message()`函數通過`/msg`路徑映射到 GET 請求。 `@get('msg')`裝飾器等效于`@route('msg', method='GET')`,或更短的`@route('msg')`。 ```py name = request.query.name age = request.query.age ``` 我們從查詢字符串中檢索數據。 ```py $ curl "localhost:8080/greet?name=Peter&age=34" Peter is 34 years old ``` 我們使用`curl`工具發出 GET 請求。 GET 請求是`curl`的默認請求。 我們將`name`和`age`參數添加到查詢字符串。 ## Bottle 靜態文件 使用`static_file()`,我們可以在 Bottle 中提供靜態文件。 ```py $ mkdir botstat && cd botstat $ mkdir public $ touch public/home.html app.py ``` 我們為應用創建目錄和文件。 `public/home.html` ```py <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Home page</title> </head> <body> <p>This is home page</p> </body> </html> ``` 這是位于`public`目錄中的主頁。 靜態資源的目錄通常稱為`public`或`static`。 `app.py` ```py #!/usr/bin/env python3 from bottle import route, run, static_file @route('/<filepath:path>') def server_static(filepath): return static_file(filepath, root='./public/') run(host='localhost', port=8080, debug=True) ``` 在此示例中,我們提供靜態文件。 為了獲得主頁,我們必須導航到`localhost:8080/home.html`。 ```py @route('/<filepath:path>') ``` `filepath:path`是僅允許出現在包含斜杠的路徑中的字符的過濾器。 ```py return static_file(filepath, root='./public/') ``` 通過`static_file()`函數,我們可以提供靜態文件。 靜態文件所在的目錄在`root`參數中指定。 ## Bottle 過濾器 包含通配符的路由稱為動態路由(與靜態路由相對)。 它們可以同時匹配多個 URL。 通配符由括在尖括號中的名稱組成(例如`<name>`),并且可以接受一個或多個字符,直到下一個斜杠為止。 過濾器可用于定義更特定的通配符。 * `:int`匹配(帶符號)數字 * `:float`匹配十進制數字 * `:path`路徑段中允許使用的數學字符 * `:re`允許指定自定義正則表達式 `filters.py` ```py #!/usr/bin/env python3 from bottle import route, run @route('/app/<myid:int>/') def provide(myid): return "Object with id {} returned".format(myid) @route('/app/<name:re:[a-z]+>/') def provide(name): return "Name {} given".format(name) run(host='localhost', port=8080, debug=True) ``` 該示例使用整數過濾器和正則表達式過濾器。 ```py $ curl localhost:8080/app/3/ Object with id 3 returned ``` 在這里,我們向路徑添加一個整數。 ## Bottle 例子 在下面的示例中,我們將表單發送到 Bottle 應用。 ```py $ mkdir simple_form && cd simple_form $ mkdir public $ touch public/index.html simple_form.py ``` 我們為應用創建目錄和文件。 `public/index.html` ```py <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Home page</title> </head> <body> <form method="post" action="doform"> <div> <label for="name">Name:</label> <input type="text" id="name" name="name"> </div> <div> <label for="occupation">Occupation:</label> <input type="text" id="occupation" name="occupation"> </div> <button type="submit">Submit</button> </form> </body> </html> ``` 在 HTML 文件中,我們有一個表單標簽。 該表格包含兩個輸入字段:名稱和職業。 `simple_form.py` ```py #!/usr/bin/env python3 from bottle import route, run, post, request, static_file @route('/') def server_static(filepath="index.html"): return static_file(filepath, root='./public/') @post('/doform') def process(): name = request.forms.get('name') occupation = request.forms.get('occupation') return "Your name is {0} and you are a(n) {1}".format(name, occupation) run(host='localhost', reloader=True, port=8080, debug=True) ``` 在`simple_form.py`文件中,我們提供一個表格并處理該表格。 ```py @route('/') def server_static(filepath="index.html"): return static_file(filepath, root='./public/') ``` 對于根路徑(/),我們從`public`目錄提供`index.html`。 ```py @post('/doform') def process(): name = request.forms.get('name') occupation = request.forms.get('occupation') return "Your name is {0} and you are a(n) {1}".format(name, occupation) ``` 在這里,我們處理表格。 我們使用`@post`裝飾器。 我們從`request.forms`獲取數據并構建消息字符串。 ## Bottle 錯誤處理器 可以使用`@error`裝飾器創建自定義錯誤頁面。 `error_handler.py` ```py #!/usr/bin/env python3 from bottle import route, run, error @route('/app/<myid:int>') def provide(myid): return "Object with id {} returned".format(myid) @error(404) def error404(error): return '404 - the requested page could not be found' run(host='localhost', port=8080, debug=True) ``` 在此示例中,我們在自定義錯誤處理器中處理 404 錯誤。 ```py @error(404) def error404(error): return '404 - the requested page could not be found' ``` `@error`裝飾器將錯誤代碼作為參數。 ```py $ curl localhost:8080/app/Peter 404 - the requested page could not be found ``` 我們嘗試訪問未定義的路由; 我們會收到自定義錯誤消息。 ## Bottle MongoDB 示例 在以下示例中,我們從 MongoDB 數據庫以 JSON 形式返回數據。 `create_cars.py` ```py #!/usr/bin/python3 from pymongo import MongoClient cars = [ {'name': 'Audi', 'price': 52642}, {'name': 'Mercedes', 'price': 57127}, {'name': 'Skoda', 'price': 9000}, {'name': 'Volvo', 'price': 29000}, {'name': 'Bentley', 'price': 350000}, {'name': 'Citroen', 'price': 21000}, {'name': 'Hummer', 'price': 41400}, {'name': 'Volkswagen', 'price': 21600} ] client = MongoClient('mongodb://localhost:27017/') with client: db = client.testdb db.cars.insert_many(cars) ``` 使用此腳本,我們創建一個 Mongo 集合。 有關在 Python 中使用 MongoDB 的更多信息,請參考 [PyMongo 教程](/python/pymongo/)。 `bottle_mongo.py` ```py #!/usr/bin/env python3 from bottle import route, run, HTTPResponse from pymongo import MongoClient import json client = MongoClient('mongodb://localhost:27017/') @route('/cars') def getcars(): db = client.testdb cars = list(db.cars.find({}, {'_id': 0})) if cars: return json.dumps(cars) else: raise HTTPResponse(status=204) run(host='localhost', port=8080, debug=True) ``` 該示例從 Mongo 集合返回數據作為 JSON。 ```py client = MongoClient('mongodb://localhost:27017/') ``` 創建一個`MongoClient`實例。 ```py db = client.testdb cars = list(db.cars.find({}, {'_id': 0})) ``` 我們從兩個字段中檢索所有數據; 我們排除`_id`字段。 ```py if cars: return json.dumps(cars) else: raise HTTPResponse(status=204) ``` 如果有數據,我們將使用`json.dumps()`將其轉換為 JSON,然后將其返回給客戶端。 否則,我們會發送 204 狀態代碼。 ## Bottle 模板示例 模板引擎是一個旨在將模板與數據模型結合以生成結果文檔的庫。 默認情況下,Bottle 使用簡單的模板引擎。 ```py $ mkdir botview && cd botview $ mkdir views $ touch views/show_cars.tpl app.py ``` 我們為應用創建目錄和文件。 `views/show_cars.tpl` ```py <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Cars</title> </head> <body> <table> <tr> <th>Name</th> <th>Price</th> </tr> % for car in cars: <tr> <td>{{car['name']}}</td> <td>{{car['price']}}</td> </tr> % end </table> </body> </html> ``` 在此模板中,我們瀏覽接收到的`cars`對象并從中生成一個表。 模板文件位于`views`目錄中。 `app.py` ```py #!/usr/bin/env python3 from bottle import route, run, template, HTTPResponse from pymongo import MongoClient client = MongoClient('mongodb://localhost:27017/') @route('/cars') def getcars(): db = client.testdb data = db.cars.find({}, {'_id': 0}) if data: return template('show_cars', cars=data) else: return HTTPResponse(status=204) run(host='localhost', port=8080, debug=True) ``` 在應用中,我們從 MongoDB 集合中檢索數據。 我們使用`template()`函數將模板文件與數據結合在一起。 在本教程中,我們使用 Bottle 在 Python 中創建簡單的 Web 應用。 您可能也對以下相關教程感興趣: [PyMongo 教程](/python/pymongo/), [Jinja 教程](/python/jinja/)和 [Python 教程](/lang/python/)。 {% endraw %}
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看