Hướng dẫn python server side flask - bình phía máy chủ python

Háo hức để bắt đầu? Trang này đưa ra một giới thiệu tốt về bình. Nó giả định rằng bạn đã cài đặt bình. Nếu bạn không, hãy đến phần cài đặt.Installation section.

Một ứng dụng tối thiểu

Một ứng dụng bình tối thiểu trông giống như thế này:

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello, World!'

Vậy mã đó đã làm gì?

  1. Đầu tiên chúng tôi nhập lớp

    PS C:\path\to\app> $env:FLASK_APP = "hello.py"
    
    8. Một ví dụ của lớp này sẽ là ứng dụng WSGI của chúng tôi.

  2. Tiếp theo chúng tôi tạo một thể hiện của lớp này. Đối số đầu tiên là tên của mô -đun hoặc gói ứng dụng. Nếu bạn đang sử dụng một mô -đun duy nhất (như trong ví dụ này), bạn nên sử dụng

    PS C:\path\to\app> $env:FLASK_APP = "hello.py"
    
    9 vì tùy thuộc vào việc nó bắt đầu như ứng dụng hay được nhập dưới dạng mô -đun, tên sẽ khác nhau (
    $ export FLASK_APP=hello.py
    $ python -m flask run
     * Running on http://127.0.0.1:5000/
    
    0 so với tên nhập thực tế). Điều này là cần thiết để Flask biết nơi tìm kiếm các mẫu, tệp tĩnh, v.v. Để biết thêm thông tin, hãy xem tài liệu
    PS C:\path\to\app> $env:FLASK_APP = "hello.py"
    
    8.

  3. Sau đó, chúng tôi sử dụng trình trang trí

    $ export FLASK_APP=hello.py
    $ python -m flask run
     * Running on http://127.0.0.1:5000/
    
    2 để nói cho bình biết URL nào sẽ kích hoạt chức năng của chúng tôi.

  4. Hàm được đặt một tên cũng được sử dụng để tạo URL cho chức năng cụ thể đó và trả về thông báo mà chúng tôi muốn hiển thị trong trình duyệt của người dùng.

Chỉ cần lưu nó dưới dạng

$ export FLASK_APP=hello.py
$ python -m flask run
 * Running on http://127.0.0.1:5000/
3 hoặc một cái gì đó tương tự. Đảm bảo không gọi ứng dụng của bạn
$ export FLASK_APP=hello.py
$ python -m flask run
 * Running on http://127.0.0.1:5000/
4 vì điều này sẽ mâu thuẫn với chính Flask.

Để chạy ứng dụng, bạn có thể sử dụng lệnh Flask hoặc công tắc Python từ

$ export FLASK_APP=hello.py
$ python -m flask run
 * Running on http://127.0.0.1:5000/
5 bằng bình. Trước khi bạn có thể làm điều đó, bạn cần nói với thiết bị đầu cuối của mình, ứng dụng hoạt động bằng cách xuất biến môi trường
$ export FLASK_APP=hello.py
$ python -m flask run
 * Running on http://127.0.0.1:5000/
6:flask command or python’s
$ export FLASK_APP=hello.py
$ python -m flask run
 * Running on http://127.0.0.1:5000/
5 switch with Flask. Before you can do that you need to tell your terminal the application to work with by exporting the
$ export FLASK_APP=hello.py
$ python -m flask run
 * Running on http://127.0.0.1:5000/
6 environment variable:

$ export FLASK_APP=hello.py
$ flask run
 * Running on http://127.0.0.1:5000/

Nếu bạn đang ở trên Windows, cú pháp biến đổi môi trường phụ thuộc vào trình thông dịch dòng lệnh. Trên dấu nhắc lệnh:

C:\path\to\app>set FLASK_APP=hello.py

Và trên PowerShell:

PS C:\path\to\app> $env:FLASK_APP = "hello.py"

Ngoài ra, bạn có thể sử dụng bình python -m:python -m flask:

$ export FLASK_APP=hello.py
$ python -m flask run
 * Running on http://127.0.0.1:5000/

Điều này ra mắt một máy chủ tích hợp rất đơn giản, đủ tốt để thử nghiệm nhưng có lẽ không phải là những gì bạn muốn sử dụng trong sản xuất. Đối với các tùy chọn triển khai, xem Tùy chọn triển khai.Deployment Options.

Bây giờ hãy đến http://127.0.0.1:5000/, và bạn sẽ thấy lời chào thế giới xin chào của bạn.

Máy chủ có thể nhìn thấy bên ngoài

Nếu bạn chạy máy chủ, bạn sẽ nhận thấy rằng máy chủ chỉ có thể truy cập từ máy tính của bạn, không phải từ bất kỳ máy tính nào trong mạng. Đây là mặc định bởi vì trong chế độ gỡ lỗi, người dùng ứng dụng có thể thực thi mã python tùy ý trên máy tính của bạn.

Nếu bạn bị tắt trình gỡ lỗi hoặc tin tưởng người dùng trên mạng của mình, bạn có thể cung cấp công khai máy chủ bằng cách thêm

$ export FLASK_APP=hello.py
$ python -m flask run
 * Running on http://127.0.0.1:5000/
7 vào dòng lệnh:

$ flask run --host=0.0.0.0

Điều này bảo hệ điều hành của bạn lắng nghe trên tất cả các IP công khai.

Phải làm gì nếu máy chủ không khởi động

Trong trường hợp bình python -m không thành công hoặc bình không tồn tại, có nhiều lý do đây có thể là trường hợp. Trước hết bạn cần nhìn vào thông báo lỗi.python -m flask fails or flask does not exist, there are multiple reasons this might be the case. First of all you need to look at the error message.

Phiên bản cũ của Flask

Các phiên bản của bình cũ hơn 0.11 được sử dụng để có các cách khác nhau để bắt đầu ứng dụng. Nói tóm lại, lệnh bình không tồn tại, và bình python -m cũng không. Trong trường hợp đó, bạn có hai tùy chọn: Nâng cấp lên các phiên bản bình mới hơn hoặc xem các tài liệu của máy chủ phát triển để xem phương thức thay thế để chạy máy chủ.flask command did not exist, and neither did python -m flask. In that case you have two options: either upgrade to newer Flask versions or have a look at the Development Server docs to see the alternative method for running a server.

Tên nhập không hợp lệ

Biến môi trường

$ export FLASK_APP=hello.py
$ python -m flask run
 * Running on http://127.0.0.1:5000/
6 là tên của mô -đun để nhập tại Flask Run. Trong trường hợp mô -đun đó được đặt tên không chính xác, bạn sẽ gặp lỗi nhập khi bắt đầu (hoặc nếu gỡ lỗi được bật khi bạn điều hướng đến ứng dụng). Nó sẽ cho bạn biết những gì nó đã cố gắng nhập khẩu và tại sao nó thất bại.flask run. In case that module is incorrectly named you will get an import error upon start (or if debug is enabled when you navigate to the application). It will tell you what it tried to import and why it failed.

Lý do phổ biến nhất là một lỗi đánh máy hoặc vì bạn không thực sự tạo một đối tượng

$ export FLASK_APP=hello.py
$ python -m flask run
 * Running on http://127.0.0.1:5000/
9.

Chế độ kiểm tra sửa lỗi¶

(Muốn chỉ đăng nhập lỗi và ngăn xếp dấu vết? Xem lỗi ứng dụng)Application Errors)

Tập lệnh Flask rất hay để khởi động một máy chủ phát triển cục bộ, nhưng bạn sẽ phải khởi động lại nó theo cách thủ công sau mỗi lần thay đổi mã của bạn. Điều đó không đẹp lắm và bình có thể làm tốt hơn. Nếu bạn bật hỗ trợ gỡ lỗi, máy chủ sẽ tự tải lại khi thay đổi mã và nó cũng sẽ cung cấp cho bạn một trình gỡ lỗi hữu ích nếu mọi thứ xảy ra.flask script is nice to start a local development server, but you would have to restart it manually after each change to your code. That is not very nice and Flask can do better. If you enable debug support the server will reload itself on code changes, and it will also provide you with a helpful debugger if things go wrong.

Để kích hoạt tất cả các tính năng phát triển (bao gồm chế độ gỡ lỗi), bạn có thể xuất biến môi trường

$ flask run --host=0.0.0.0
0 và đặt nó thành
$ flask run --host=0.0.0.0
1 trước khi chạy máy chủ:

$ export FLASK_ENV=development
$ flask run

(Trên Windows, bạn cần sử dụng

$ flask run --host=0.0.0.0
2 thay vì
$ flask run --host=0.0.0.0
3.)

Điều này làm những điều sau:

  1. nó kích hoạt trình gỡ lỗi

  2. nó kích hoạt bộ tải lại tự động

  3. Nó cho phép chế độ gỡ lỗi trên ứng dụng bình.

Bạn cũng có thể kiểm soát chế độ gỡ lỗi riêng biệt với môi trường bằng cách xuất

$ flask run --host=0.0.0.0
4.

Có nhiều tham số được giải thích trong tài liệu máy chủ phát triển.Development Server docs.

Chú ý

Mặc dù trình gỡ lỗi tương tác không hoạt động trong môi trường forking (điều này gần như không thể sử dụng trên các máy chủ sản xuất), nhưng nó vẫn cho phép thực thi mã tùy ý. Điều này làm cho nó trở thành một rủi ro bảo mật lớn và do đó nó không bao giờ được sử dụng trên máy sản xuất.must never be used on production machines.

Ảnh chụp màn hình của trình gỡ lỗi trong hành động:

Hướng dẫn python server side flask - bình phía máy chủ python

Thông tin thêm về việc sử dụng trình gỡ lỗi có thể được tìm thấy trong tài liệu Werkzeug.

Có một trình gỡ lỗi khác trong tâm trí? Xem làm việc với Debuggers.Working with Debuggers.

Lộ trình¶

Các ứng dụng web hiện đại sử dụng các URL có ý nghĩa để giúp người dùng. Người dùng có nhiều khả năng thích một trang và quay lại nếu trang sử dụng URL có ý nghĩa mà họ có thể nhớ và sử dụng để truy cập trực tiếp một trang.

Sử dụng trình trang trí

$ export FLASK_APP=hello.py
$ python -m flask run
 * Running on http://127.0.0.1:5000/
2 để liên kết một hàm với URL.

@app.route('/')
def index():
    return 'Index Page'

@app.route('/hello')
def hello():
    return 'Hello, World'

Bạn có thể làm nhiều hơn nữa! Bạn có thể tạo các phần của động lực URL và đính kèm nhiều quy tắc vào một hàm.

Quy tắc biến

Bạn có thể thêm các phần biến vào URL bằng cách đánh dấu các phần bằng

$ flask run --host=0.0.0.0
6. Chức năng của bạn sau đó nhận được
$ flask run --host=0.0.0.0
6 làm đối số từ khóa. Tùy chọn, bạn có thể sử dụng một bộ chuyển đổi để chỉ định loại đối số như
$ flask run --host=0.0.0.0
8.

from markupsafe import escape

@app.route('/user/')
def show_user_profile(username):
    # show the user profile for that user
    return 'User %s' % escape(username)

@app.route('/post/')
def show_post(post_id):
    # show the post with the given id, the id is an integer
    return 'Post %d' % post_id

@app.route('/path/')
def show_subpath(subpath):
    # show the subpath after /path/
    return 'Subpath %s' % escape(subpath)

Các loại chuyển đổi:

$ flask run --host=0.0.0.0
9

(Mặc định) Chấp nhận bất kỳ văn bản nào mà không có dấu gạch chéo

$ export FLASK_ENV=development
$ flask run
0

Chấp nhận số nguyên tích cực

$ export FLASK_ENV=development
$ flask run
1

Chấp nhận các giá trị điểm nổi tích cực

$ export FLASK_ENV=development
$ flask run
2

như

$ flask run --host=0.0.0.0
9 nhưng cũng chấp nhận chém

$ export FLASK_ENV=development
$ flask run
4

Chấp nhận chuỗi UUID

URL duy nhất / hành vi chuyển hướng

Hai quy tắc sau đây khác nhau trong việc sử dụng một dấu gạch chéo.

@app.route('/projects/')
def projects():
    return 'The project page'

@app.route('/about')
def about():
    return 'The about page'

URL kinh điển cho điểm cuối

$ export FLASK_ENV=development
$ flask run
5 có một dấu gạch chéo. Nó tương tự như một thư mục trong một hệ thống tệp. Nếu bạn truy cập vào URL mà không có dấu vết dấu vết, Flask chuyển hướng bạn đến URL chính tắc với dấu gạch chéo.

URL kinh điển cho điểm cuối

$ export FLASK_ENV=development
$ flask run
6 không có dấu vết dấu vết. Nó tương tự như tên đường dẫn của một tập tin. Truy cập URL với dấu gạch chéo tạo ra lỗi 404 không tìm thấy. Điều này giúp giữ cho các URL duy nhất cho các tài nguyên này, giúp các công cụ tìm kiếm tránh lập chỉ mục cùng một trang hai lần.

Tòa nhà URL

Để xây dựng URL thành một hàm cụ thể, hãy sử dụng hàm

$ export FLASK_ENV=development
$ flask run
7. Nó chấp nhận tên của hàm là đối số đầu tiên và bất kỳ số lượng đối số từ khóa nào, mỗi đối số tương ứng với một phần biến của quy tắc URL. Các phần biến không xác định được gắn vào URL làm tham số truy vấn.

Tại sao bạn muốn xây dựng các URL bằng cách sử dụng hàm đảo ngược URL

$ export FLASK_ENV=development
$ flask run
7 thay vì mã hóa cứng chúng vào các mẫu của bạn?

  1. Đảo ngược thường mô tả nhiều hơn so với mã hóa cứng các URL.

  2. Bạn có thể thay đổi URL của mình trong một lần thay vì cần nhớ thay đổi thủ công các URL được mã hóa cứng.

  3. Xây dựng URL xử lý thoát khỏi các ký tự đặc biệt và dữ liệu Unicode một cách minh bạch.

  4. Các đường dẫn được tạo luôn luôn tuyệt đối, tránh hành vi bất ngờ của các đường dẫn tương đối trong trình duyệt.

  5. Ví dụ, nếu ứng dụng của bạn được đặt bên ngoài gốc URL, trong

    $ export FLASK_ENV=development
    $ flask run
    
    9 thay vì
    @app.route('/')
    def index():
        return 'Index Page'
    
    @app.route('/hello')
    def hello():
        return 'Hello, World'
    
    0,
    $ export FLASK_ENV=development
    $ flask run
    
    7 xử lý đúng cách cho bạn.

Ví dụ: ở đây chúng tôi sử dụng phương thức

@app.route('/')
def index():
    return 'Index Page'

@app.route('/hello')
def hello():
    return 'Hello, World'
2 để thử
$ export FLASK_ENV=development
$ flask run
7.
@app.route('/')
def index():
    return 'Index Page'

@app.route('/hello')
def hello():
    return 'Hello, World'
2 bảo Flask cư xử như thể nó xử lý một yêu cầu ngay cả khi chúng tôi sử dụng vỏ Python. Xem bối cảnh của người dân địa phương.Context Locals.

$ export FLASK_APP=hello.py
$ flask run
 * Running on http://127.0.0.1:5000/
0

$ export FLASK_APP=hello.py
$ flask run
 * Running on http://127.0.0.1:5000/
1

Phương pháp HTTP

Các ứng dụng web sử dụng các phương thức HTTP khác nhau khi truy cập URL. Bạn nên làm quen với các phương pháp HTTP khi bạn làm việc với bình. Theo mặc định, một tuyến đường chỉ trả lời cho các yêu cầu

@app.route('/')
def index():
    return 'Index Page'

@app.route('/hello')
def hello():
    return 'Hello, World'
5. Bạn có thể sử dụng đối số
@app.route('/')
def index():
    return 'Index Page'

@app.route('/hello')
def hello():
    return 'Hello, World'
6 của trình trang trí
$ export FLASK_APP=hello.py
$ python -m flask run
 * Running on http://127.0.0.1:5000/
2 để xử lý các phương pháp HTTP khác nhau.

$ export FLASK_APP=hello.py
$ flask run
 * Running on http://127.0.0.1:5000/
2

Nếu

@app.route('/')
def index():
    return 'Index Page'

@app.route('/hello')
def hello():
    return 'Hello, World'
5 có mặt, Flask sẽ tự động thêm hỗ trợ cho phương thức
@app.route('/')
def index():
    return 'Index Page'

@app.route('/hello')
def hello():
    return 'Hello, World'
9 và xử lý các yêu cầu
@app.route('/')
def index():
    return 'Index Page'

@app.route('/hello')
def hello():
    return 'Hello, World'
9 theo HTTP RFC. Tương tự như vậy,
from markupsafe import escape

@app.route('/user/')
def show_user_profile(username):
    # show the user profile for that user
    return 'User %s' % escape(username)

@app.route('/post/')
def show_post(post_id):
    # show the post with the given id, the id is an integer
    return 'Post %d' % post_id

@app.route('/path/')
def show_subpath(subpath):
    # show the subpath after /path/
    return 'Subpath %s' % escape(subpath)
1 được tự động thực hiện cho bạn.

Các tệp tĩnh

Các ứng dụng web động cũng cần các tệp tĩnh. Đó thường là nơi các tệp CSS và JavaScript đến từ. Lý tưởng nhất là máy chủ web của bạn được cấu hình để phục vụ chúng cho bạn, nhưng trong khi bình thường phát triển cũng có thể làm điều đó. Chỉ cần tạo một thư mục có tên

from markupsafe import escape

@app.route('/user/')
def show_user_profile(username):
    # show the user profile for that user
    return 'User %s' % escape(username)

@app.route('/post/')
def show_post(post_id):
    # show the post with the given id, the id is an integer
    return 'Post %d' % post_id

@app.route('/path/')
def show_subpath(subpath):
    # show the subpath after /path/
    return 'Subpath %s' % escape(subpath)
2 trong gói của bạn hoặc bên cạnh mô -đun của bạn và nó sẽ có sẵn tại
from markupsafe import escape

@app.route('/user/')
def show_user_profile(username):
    # show the user profile for that user
    return 'User %s' % escape(username)

@app.route('/post/')
def show_post(post_id):
    # show the post with the given id, the id is an integer
    return 'Post %d' % post_id

@app.route('/path/')
def show_subpath(subpath):
    # show the subpath after /path/
    return 'Subpath %s' % escape(subpath)
3 trên ứng dụng.

Để tạo URL cho các tệp tĩnh, hãy sử dụng tên điểm cuối

from markupsafe import escape

@app.route('/user/')
def show_user_profile(username):
    # show the user profile for that user
    return 'User %s' % escape(username)

@app.route('/post/')
def show_post(post_id):
    # show the post with the given id, the id is an integer
    return 'Post %d' % post_id

@app.route('/path/')
def show_subpath(subpath):
    # show the subpath after /path/
    return 'Subpath %s' % escape(subpath)
4 đặc biệt:

$ export FLASK_APP=hello.py
$ flask run
 * Running on http://127.0.0.1:5000/
3

Tệp phải được lưu trữ trên hệ thống tập tin là

from markupsafe import escape

@app.route('/user/')
def show_user_profile(username):
    # show the user profile for that user
    return 'User %s' % escape(username)

@app.route('/post/')
def show_post(post_id):
    # show the post with the given id, the id is an integer
    return 'Post %d' % post_id

@app.route('/path/')
def show_subpath(subpath):
    # show the subpath after /path/
    return 'Subpath %s' % escape(subpath)
5.

Kết xuất các mẫu

Tạo HTML từ bên trong Python không thú vị và thực sự khá cồng kềnh vì bạn phải tự mình thực hiện HTML để giữ an toàn cho ứng dụng. Do đó, bình định cấu hình công cụ mẫu jinja2 cho bạn tự động.

Để hiển thị một mẫu, bạn có thể sử dụng phương thức

from markupsafe import escape

@app.route('/user/')
def show_user_profile(username):
    # show the user profile for that user
    return 'User %s' % escape(username)

@app.route('/post/')
def show_post(post_id):
    # show the post with the given id, the id is an integer
    return 'Post %d' % post_id

@app.route('/path/')
def show_subpath(subpath):
    # show the subpath after /path/
    return 'Subpath %s' % escape(subpath)
6. Tất cả những gì bạn phải làm là cung cấp tên của mẫu và các biến bạn muốn chuyển đến công cụ mẫu làm đối số từ khóa. Dưới đây, một ví dụ đơn giản về cách hiển thị một mẫu:

$ export FLASK_APP=hello.py
$ flask run
 * Running on http://127.0.0.1:5000/
4

Bình sẽ tìm kiếm các mẫu trong thư mục

from markupsafe import escape

@app.route('/user/')
def show_user_profile(username):
    # show the user profile for that user
    return 'User %s' % escape(username)

@app.route('/post/')
def show_post(post_id):
    # show the post with the given id, the id is an integer
    return 'Post %d' % post_id

@app.route('/path/')
def show_subpath(subpath):
    # show the subpath after /path/
    return 'Subpath %s' % escape(subpath)
7. Vì vậy, nếu ứng dụng của bạn là một mô -đun, thư mục này nằm cạnh mô -đun đó, nếu nó là một gói, nó thực sự bên trong gói của bạn:

Trường hợp 1: Một mô -đun:: a module:

$ export FLASK_APP=hello.py
$ flask run
 * Running on http://127.0.0.1:5000/
5

Trường hợp 2: một gói:: a package:

$ export FLASK_APP=hello.py
$ flask run
 * Running on http://127.0.0.1:5000/
6

Đối với các mẫu, bạn có thể sử dụng toàn bộ sức mạnh của các mẫu jinja2. Truy cập tài liệu mẫu Jinja2 chính thức để biết thêm thông tin.

Đây là một mẫu ví dụ:

$ export FLASK_APP=hello.py
$ flask run
 * Running on http://127.0.0.1:5000/
7

Bên trong các mẫu, bạn cũng có quyền truy cập vào các đối tượng

from markupsafe import escape

@app.route('/user/')
def show_user_profile(username):
    # show the user profile for that user
    return 'User %s' % escape(username)

@app.route('/post/')
def show_post(post_id):
    # show the post with the given id, the id is an integer
    return 'Post %d' % post_id

@app.route('/path/')
def show_subpath(subpath):
    # show the subpath after /path/
    return 'Subpath %s' % escape(subpath)
8,
from markupsafe import escape

@app.route('/user/')
def show_user_profile(username):
    # show the user profile for that user
    return 'User %s' % escape(username)

@app.route('/post/')
def show_post(post_id):
    # show the post with the given id, the id is an integer
    return 'Post %d' % post_id

@app.route('/path/')
def show_subpath(subpath):
    # show the subpath after /path/
    return 'Subpath %s' % escape(subpath)
9 và
@app.route('/projects/')
def projects():
    return 'The project page'

@app.route('/about')
def about():
    return 'The about page'
0 1 cũng như hàm
@app.route('/projects/')
def projects():
    return 'The project page'

@app.route('/about')
def about():
    return 'The about page'
1.

Các mẫu đặc biệt hữu ích nếu di truyền được sử dụng. Nếu bạn muốn biết cách thức hoạt động của nó, hãy truy cập tài liệu mẫu kế thừa mẫu. Về cơ bản, kế thừa mẫu cho phép giữ các yếu tố nhất định trên mỗi trang (như tiêu đề, điều hướng và chân trang).Template Inheritance pattern documentation. Basically template inheritance makes it possible to keep certain elements on each page (like header, navigation and footer).

Tự động thoát ra được bật, vì vậy nếu

@app.route('/projects/')
def projects():
    return 'The project page'

@app.route('/about')
def about():
    return 'The about page'
2 chứa HTML, nó sẽ được thoát tự động. Nếu bạn có thể tin tưởng một biến và bạn biết rằng đó sẽ là HTML an toàn (ví dụ vì nó đến từ một mô -đun chuyển đổi đánh dấu wiki thành html), bạn có thể đánh dấu nó an toàn bằng cách sử dụng lớp
@app.route('/projects/')
def projects():
    return 'The project page'

@app.route('/about')
def about():
    return 'The about page'
3 hoặc bằng cách sử dụng bộ lọc
@app.route('/projects/')
def projects():
    return 'The project page'

@app.route('/about')
def about():
    return 'The about page'
4 trong bộ lọc
@app.route('/projects/')
def projects():
    return 'The project page'

@app.route('/about')
def about():
    return 'The about page'
4 trong mẫu. Truy cập tài liệu Jinja 2 để biết thêm ví dụ.

Dưới đây là phần giới thiệu cơ bản về cách thức hoạt động của lớp

@app.route('/projects/')
def projects():
    return 'The project page'

@app.route('/about')
def about():
    return 'The about page'
3:

$ export FLASK_APP=hello.py
$ flask run
 * Running on http://127.0.0.1:5000/
8

Thay đổi

Thay đổi trong phiên bản 0.5: Tự động hóa không còn được bật cho tất cả các mẫu. Các tiện ích mở rộng sau đây cho các mẫu kích hoạt tự động tự động:

@app.route('/projects/')
def projects():
    return 'The project page'

@app.route('/about')
def about():
    return 'The about page'
6,
@app.route('/projects/')
def projects():
    return 'The project page'

@app.route('/about')
def about():
    return 'The about page'
7,
@app.route('/projects/')
def projects():
    return 'The project page'

@app.route('/about')
def about():
    return 'The about page'
8,
@app.route('/projects/')
def projects():
    return 'The project page'

@app.route('/about')
def about():
    return 'The about page'
9. Các mẫu được tải từ một chuỗi sẽ bị tắt tự động.Autoescaping is no longer enabled for all templates. The following extensions for templates trigger autoescaping:
@app.route('/projects/')
def projects():
    return 'The project page'

@app.route('/about')
def about():
    return 'The about page'
6,
@app.route('/projects/')
def projects():
    return 'The project page'

@app.route('/about')
def about():
    return 'The about page'
7,
@app.route('/projects/')
def projects():
    return 'The project page'

@app.route('/about')
def about():
    return 'The about page'
8,
@app.route('/projects/')
def projects():
    return 'The project page'

@app.route('/about')
def about():
    return 'The about page'
9. Templates loaded from a string will have autoescaping disabled.

1

Không chắc chắn đối tượng

@app.route('/projects/')
def projects():
    return 'The project page'

@app.route('/about')
def about():
    return 'The about page'
0 đó là gì? Nó có một cái gì đó mà bạn có thể lưu trữ thông tin cho nhu cầu của riêng mình, hãy kiểm tra tài liệu của đối tượng đó (
@app.route('/projects/')
def projects():
    return 'The project page'

@app.route('/about')
def about():
    return 'The about page'
0) và sử dụng SQLite 3 với bình để biết thêm thông tin.Using SQLite 3 with Flask for more information.

Truy cập dữ liệu yêu cầu Jo

Đối với các ứng dụng web, nó rất quan trọng để phản ứng với dữ liệu mà máy khách gửi đến máy chủ. Trong bình Thông tin này được cung cấp bởi đối tượng toàn cầu

from markupsafe import escape

@app.route('/user/')
def show_user_profile(username):
    # show the user profile for that user
    return 'User %s' % escape(username)

@app.route('/post/')
def show_post(post_id):
    # show the post with the given id, the id is an integer
    return 'Post %d' % post_id

@app.route('/path/')
def show_subpath(subpath):
    # show the subpath after /path/
    return 'Subpath %s' % escape(subpath)
8. Nếu bạn có một số kinh nghiệm với Python, bạn có thể tự hỏi làm thế nào đối tượng đó có thể toàn cầu và cách quản lý Flask vẫn là ThreadSafe. Câu trả lời là người dân địa phương bối cảnh:

Bối cảnh người dân địa phương Jo

Thông tin từ người trong cuộc

Nếu bạn muốn hiểu cách thức hoạt động của nó và cách bạn có thể thực hiện các bài kiểm tra với người dân địa phương, hãy đọc phần này, nếu không chỉ cần bỏ qua nó.

Một số đối tượng trong bình là các đối tượng toàn cầu, nhưng không phải là loại thông thường. Các đối tượng này thực sự là proxy cho các đối tượng là cục bộ cho một bối cảnh cụ thể. Thật là một miệng. Nhưng điều đó thực sự khá dễ hiểu.

Hãy tưởng tượng bối cảnh là chủ đề xử lý. Một yêu cầu xuất hiện và máy chủ web quyết định sinh ra một luồng mới (hoặc một cái gì đó khác, đối tượng cơ bản có khả năng xử lý các hệ thống đồng thời khác với các luồng). Khi Flask bắt đầu yêu cầu nội bộ của nó xử lý, nó cho rằng luồng hiện tại là bối cảnh hoạt động và liên kết ứng dụng hiện tại và môi trường WSGI với bối cảnh đó (luồng). Nó làm điều đó một cách thông minh để một ứng dụng có thể gọi một ứng dụng khác mà không bị phá vỡ.

Vậy nó có nghĩa gì đối với bạn? Về cơ bản, bạn hoàn toàn có thể bỏ qua rằng đây là trường hợp trừ khi bạn đang làm một cái gì đó như kiểm tra đơn vị. Bạn sẽ nhận thấy mã đó phụ thuộc vào đối tượng yêu cầu sẽ đột ngột bị phá vỡ vì không có đối tượng yêu cầu. Giải pháp là tự tạo một đối tượng yêu cầu và ràng buộc nó với bối cảnh. Giải pháp dễ nhất để kiểm tra đơn vị là sử dụng Trình quản lý bối cảnh

@app.route('/')
def index():
    return 'Index Page'

@app.route('/hello')
def hello():
    return 'Hello, World'
2. Kết hợp với câu lệnh
$ export FLASK_APP=hello.py
$ flask run
 * Running on http://127.0.0.1:5000/
04, nó sẽ liên kết một yêu cầu thử nghiệm để bạn có thể tương tác với nó. Đây là một ví dụ:

$ export FLASK_APP=hello.py
$ flask run
 * Running on http://127.0.0.1:5000/
9

Khả năng khác là chuyển toàn bộ môi trường WSGI cho phương pháp

$ export FLASK_APP=hello.py
$ flask run
 * Running on http://127.0.0.1:5000/
05:

C:\path\to\app>set FLASK_APP=hello.py
0

Đối tượng yêu cầu

Đối tượng yêu cầu được ghi lại trong phần API và chúng tôi sẽ không trình bày chi tiết ở đây (xem

$ export FLASK_APP=hello.py
$ flask run
 * Running on http://127.0.0.1:5000/
06). Dưới đây là một cái nhìn tổng quan rộng rãi về một số hoạt động phổ biến nhất. Trước hết bạn phải nhập nó từ mô -đun
$ export FLASK_APP=hello.py
$ flask run
 * Running on http://127.0.0.1:5000/
07:

C:\path\to\app>set FLASK_APP=hello.py
1

Phương thức yêu cầu hiện tại có sẵn bằng cách sử dụng thuộc tính

$ export FLASK_APP=hello.py
$ flask run
 * Running on http://127.0.0.1:5000/
08. Để truy cập dữ liệu biểu mẫu (dữ liệu được truyền trong yêu cầu
$ export FLASK_APP=hello.py
$ flask run
 * Running on http://127.0.0.1:5000/
09 hoặc
$ export FLASK_APP=hello.py
$ flask run
 * Running on http://127.0.0.1:5000/
10), bạn có thể sử dụng thuộc tính
$ export FLASK_APP=hello.py
$ flask run
 * Running on http://127.0.0.1:5000/
11. Dưới đây là một ví dụ đầy đủ về hai thuộc tính được đề cập ở trên:

C:\path\to\app>set FLASK_APP=hello.py
2

Điều gì xảy ra nếu khóa không tồn tại trong thuộc tính

$ export FLASK_APP=hello.py
$ flask run
 * Running on http://127.0.0.1:5000/
11? Trong trường hợp đó, một
$ export FLASK_APP=hello.py
$ flask run
 * Running on http://127.0.0.1:5000/
13 đặc biệt được nâng lên. Bạn có thể bắt nó giống như một
$ export FLASK_APP=hello.py
$ flask run
 * Running on http://127.0.0.1:5000/
13 tiêu chuẩn nhưng nếu bạn không làm điều đó, một trang lỗi yêu cầu xấu HTTP 400 được hiển thị thay thế. Vì vậy, đối với nhiều tình huống, bạn không phải giải quyết vấn đề đó.

Để truy cập các tham số được gửi trong URL (

$ export FLASK_APP=hello.py
$ flask run
 * Running on http://127.0.0.1:5000/
15), bạn có thể sử dụng thuộc tính
$ export FLASK_APP=hello.py
$ flask run
 * Running on http://127.0.0.1:5000/
16:

C:\path\to\app>set FLASK_APP=hello.py
3

Chúng tôi khuyên bạn nên truy cập các tham số URL với GET hoặc bằng cách bắt

$ export FLASK_APP=hello.py
$ flask run
 * Running on http://127.0.0.1:5000/
13 vì người dùng có thể thay đổi URL và trình bày cho họ một trang yêu cầu xấu 400 trong trường hợp đó không thân thiện với người dùng.

Đối với một danh sách đầy đủ các phương thức và thuộc tính của đối tượng yêu cầu, hãy truy cập tài liệu

$ export FLASK_APP=hello.py
$ flask run
 * Running on http://127.0.0.1:5000/
06.

Tải lên tệp lên

Bạn có thể xử lý các tệp đã tải lên bằng bình dễ dàng. Chỉ cần đảm bảo không quên đặt thuộc tính

$ export FLASK_APP=hello.py
$ flask run
 * Running on http://127.0.0.1:5000/
19 trên biểu mẫu HTML của bạn, nếu không trình duyệt sẽ không truyền tệp của bạn.

Các tệp được tải lên được lưu trữ trong bộ nhớ hoặc tại một vị trí tạm thời trên hệ thống tập tin. Bạn có thể truy cập các tệp đó bằng cách xem thuộc tính

$ export FLASK_APP=hello.py
$ flask run
 * Running on http://127.0.0.1:5000/
20 trên đối tượng yêu cầu. Mỗi tệp được tải lên được lưu trữ trong từ điển đó. Nó hoạt động giống như một đối tượng Python
$ export FLASK_APP=hello.py
$ flask run
 * Running on http://127.0.0.1:5000/
21 tiêu chuẩn, nhưng nó cũng có phương thức
$ export FLASK_APP=hello.py
$ flask run
 * Running on http://127.0.0.1:5000/
22 cho phép bạn lưu trữ tệp đó trên hệ thống tập tin của máy chủ. Dưới đây là một ví dụ đơn giản cho thấy cách thức hoạt động:

C:\path\to\app>set FLASK_APP=hello.py
4

Nếu bạn muốn biết làm thế nào tệp được đặt tên trên máy khách trước khi nó được tải lên ứng dụng của bạn, bạn có thể truy cập thuộc tính

$ export FLASK_APP=hello.py
$ flask run
 * Running on http://127.0.0.1:5000/
23. Tuy nhiên, xin lưu ý rằng giá trị này có thể được rèn nên không bao giờ tin tưởng giá trị đó. Nếu bạn muốn sử dụng tên tệp của máy khách để lưu trữ tệp trên máy chủ, hãy chuyển nó qua hàm
$ export FLASK_APP=hello.py
$ flask run
 * Running on http://127.0.0.1:5000/
24 mà Werkzeug cung cấp cho bạn:

C:\path\to\app>set FLASK_APP=hello.py
5

Đối với một số ví dụ tốt hơn, hãy kiểm tra mẫu tệp tải lên.Uploading Files pattern.

Bánh quy¶

Để truy cập cookie, bạn có thể sử dụng thuộc tính

$ export FLASK_APP=hello.py
$ flask run
 * Running on http://127.0.0.1:5000/
25. Để đặt cookie, bạn có thể sử dụng phương thức đối tượng phản hồi
$ export FLASK_APP=hello.py
$ flask run
 * Running on http://127.0.0.1:5000/
26. Thuộc tính
$ export FLASK_APP=hello.py
$ flask run
 * Running on http://127.0.0.1:5000/
25 của các đối tượng yêu cầu là một từ điển với tất cả các cookie mà máy khách truyền. Nếu bạn muốn sử dụng các phiên, không sử dụng cookie trực tiếp mà thay vào đó sử dụng các phiên trong bình thêm một số bảo mật trên đầu cookie cho bạn.Sessions in Flask that add some security on top of cookies for you.

Đọc cookie:

C:\path\to\app>set FLASK_APP=hello.py
6

Lưu trữ cookie:

C:\path\to\app>set FLASK_APP=hello.py
7

Lưu ý rằng cookie được đặt trên các đối tượng phản hồi. Vì thông thường bạn chỉ trả lại các chuỗi từ Bình xem Chế độ xem sẽ chuyển đổi chúng thành các đối tượng phản hồi cho bạn. Nếu bạn rõ ràng muốn làm điều đó, bạn có thể sử dụng chức năng

$ export FLASK_APP=hello.py
$ flask run
 * Running on http://127.0.0.1:5000/
28 và sau đó sửa đổi nó.

Đôi khi bạn có thể muốn đặt cookie tại một điểm mà đối tượng phản hồi chưa tồn tại. Điều này là có thể bằng cách sử dụng mẫu gọi lại yêu cầu hoãn lại.Deferred Request Callbacks pattern.

Đối với điều này cũng xem về các câu trả lời.About Responses.

Chuyển hướng và lỗi

Để chuyển hướng người dùng đến điểm cuối khác, hãy sử dụng hàm

$ export FLASK_APP=hello.py
$ flask run
 * Running on http://127.0.0.1:5000/
29; Để hủy bỏ yêu cầu sớm bằng mã lỗi, hãy sử dụng hàm
$ export FLASK_APP=hello.py
$ flask run
 * Running on http://127.0.0.1:5000/
30:

C:\path\to\app>set FLASK_APP=hello.py
8

Đây là một ví dụ khá vô nghĩa vì người dùng sẽ được chuyển hướng từ chỉ mục đến một trang mà họ không thể truy cập (401 có nghĩa là bị từ chối truy cập) nhưng nó cho thấy cách hoạt động.

Theo mặc định, một trang lỗi đen trắng được hiển thị cho mỗi mã lỗi. Nếu bạn muốn tùy chỉnh trang lỗi, bạn có thể sử dụng trình trang trí

$ export FLASK_APP=hello.py
$ flask run
 * Running on http://127.0.0.1:5000/
31:

C:\path\to\app>set FLASK_APP=hello.py
9

Lưu ý

$ export FLASK_APP=hello.py
$ flask run
 * Running on http://127.0.0.1:5000/
32 sau cuộc gọi
from markupsafe import escape

@app.route('/user/')
def show_user_profile(username):
    # show the user profile for that user
    return 'User %s' % escape(username)

@app.route('/post/')
def show_post(post_id):
    # show the post with the given id, the id is an integer
    return 'Post %d' % post_id

@app.route('/path/')
def show_subpath(subpath):
    # show the subpath after /path/
    return 'Subpath %s' % escape(subpath)
6. Điều này cho Flask nói rằng mã trạng thái của trang đó phải là 404 có nghĩa là không tìm thấy. Theo mặc định, 200 được giả định dịch là: tất cả đều diễn ra tốt đẹp.

Xem trình xử lý lỗi để biết thêm chi tiết.Error handlers for more details.

Về phản hồi Jo

Giá trị trả về từ hàm xem được tự động chuyển đổi thành đối tượng phản hồi cho bạn. Nếu giá trị trả về là một chuỗi, nó được chuyển đổi thành một đối tượng phản hồi với phần thân là phần thân phản hồi, mã trạng thái

$ export FLASK_APP=hello.py
$ flask run
 * Running on http://127.0.0.1:5000/
34 và một mô hình văn bản/HTML. Nếu giá trị trả về là một lệnh,
$ export FLASK_APP=hello.py
$ flask run
 * Running on http://127.0.0.1:5000/
35 được gọi để tạo ra phản hồi. Logic mà bình áp dụng để chuyển đổi các giá trị trả về thành các đối tượng phản hồi như sau:

  1. Nếu một đối tượng phản hồi của loại chính xác được trả về, nó sẽ được trả về trực tiếp từ chế độ xem.

  2. Nếu nó là một chuỗi, một đối tượng phản hồi được tạo với dữ liệu đó và các tham số mặc định.

  3. Nếu nó là một dict, một đối tượng phản hồi được tạo bằng cách sử dụng

    $ export FLASK_APP=hello.py
    $ flask run
     * Running on http://127.0.0.1:5000/
    
    36.

  4. Nếu một tuple được trả lại, các mục trong tuple có thể cung cấp thêm thông tin. Các bộ dữ liệu như vậy phải ở dạng

    $ export FLASK_APP=hello.py
    $ flask run
     * Running on http://127.0.0.1:5000/
    
    37,
    $ export FLASK_APP=hello.py
    $ flask run
     * Running on http://127.0.0.1:5000/
    
    38 hoặc
    $ export FLASK_APP=hello.py
    $ flask run
     * Running on http://127.0.0.1:5000/
    
    39. Giá trị
    $ export FLASK_APP=hello.py
    $ flask run
     * Running on http://127.0.0.1:5000/
    
    40 sẽ ghi đè mã trạng thái và
    $ export FLASK_APP=hello.py
    $ flask run
     * Running on http://127.0.0.1:5000/
    
    41 có thể là danh sách hoặc từ điển của các giá trị tiêu đề bổ sung.

  5. Nếu không có hoạt động nào, Flask sẽ giả sử giá trị trả về là ứng dụng WSGI hợp lệ và chuyển đổi nó thành một đối tượng phản hồi.

Nếu bạn muốn giữ đối tượng phản hồi kết quả bên trong chế độ xem, bạn có thể sử dụng hàm

$ export FLASK_APP=hello.py
$ flask run
 * Running on http://127.0.0.1:5000/
28.

Hãy tưởng tượng bạn có một cái nhìn như thế này:

PS C:\path\to\app> $env:FLASK_APP = "hello.py"
0

Bạn chỉ cần kết thúc biểu thức trả về với

$ export FLASK_APP=hello.py
$ flask run
 * Running on http://127.0.0.1:5000/
28 và lấy đối tượng phản hồi để sửa đổi nó, sau đó trả về nó:

PS C:\path\to\app> $env:FLASK_APP = "hello.py"
1

API với Json¶

Một định dạng phản hồi phổ biến khi viết API là JSON. Nó dễ dàng bắt đầu viết một API như vậy với bình. Nếu bạn trả lại

$ export FLASK_APP=hello.py
$ flask run
 * Running on http://127.0.0.1:5000/
44 từ chế độ xem, nó sẽ được chuyển đổi thành phản hồi JSON.

PS C:\path\to\app> $env:FLASK_APP = "hello.py"
2

Tùy thuộc vào thiết kế API của bạn, bạn có thể muốn tạo các phản hồi JSON cho các loại khác ngoài

$ export FLASK_APP=hello.py
$ flask run
 * Running on http://127.0.0.1:5000/
44. Trong trường hợp đó, sử dụng hàm
$ export FLASK_APP=hello.py
$ flask run
 * Running on http://127.0.0.1:5000/
35, sẽ tuần tự hóa bất kỳ loại dữ liệu JSON được hỗ trợ nào. Hoặc xem xét các phần mở rộng cộng đồng của Flask hỗ trợ các ứng dụng phức tạp hơn.

PS C:\path\to\app> $env:FLASK_APP = "hello.py"
3

Phiên

Ngoài đối tượng yêu cầu, còn có một đối tượng thứ hai gọi là

from markupsafe import escape

@app.route('/user/')
def show_user_profile(username):
    # show the user profile for that user
    return 'User %s' % escape(username)

@app.route('/post/')
def show_post(post_id):
    # show the post with the given id, the id is an integer
    return 'Post %d' % post_id

@app.route('/path/')
def show_subpath(subpath):
    # show the subpath after /path/
    return 'Subpath %s' % escape(subpath)
9 cho phép bạn lưu trữ thông tin cụ thể cho người dùng từ yêu cầu này sang yêu cầu tiếp theo. Điều này được triển khai trên đầu cookie cho bạn và ký tên vào cookie bằng mật mã. Điều này có nghĩa là người dùng có thể xem nội dung của cookie của bạn nhưng không sửa đổi nó, trừ khi họ biết khóa bí mật được sử dụng để ký.

Để sử dụng các phiên, bạn phải đặt khóa bí mật. Đây là cách các phiên hoạt động:

PS C:\path\to\app> $env:FLASK_APP = "hello.py"
4

$ export FLASK_APP=hello.py
$ flask run
 * Running on http://127.0.0.1:5000/
48 được đề cập ở đây sẽ thoát khỏi bạn nếu bạn không sử dụng công cụ mẫu (như trong ví dụ này).

Cách tạo khóa bí mật tốt

Một khóa bí mật nên ngẫu nhiên nhất có thể. Hệ điều hành của bạn có cách tạo dữ liệu khá ngẫu nhiên dựa trên trình tạo ngẫu nhiên mật mã. Sử dụng lệnh sau để nhanh chóng tạo giá trị cho

$ export FLASK_APP=hello.py
$ flask run
 * Running on http://127.0.0.1:5000/
49 (hoặc
$ export FLASK_APP=hello.py
$ flask run
 * Running on http://127.0.0.1:5000/
50):

PS C:\path\to\app> $env:FLASK_APP = "hello.py"
5

Một lưu ý trên các phiên dựa trên cookie: Flask sẽ lấy các giá trị bạn đặt vào đối tượng phiên và tuần tự hóa chúng thành cookie. Nếu bạn tìm thấy một số giá trị không tồn tại qua các yêu cầu, cookie thực sự được bật và bạn không nhận được thông báo lỗi rõ ràng, hãy kiểm tra kích thước của cookie trong các phản hồi trang của bạn so với kích thước được hỗ trợ bởi trình duyệt web.

Bên cạnh các phiên dựa trên phía máy khách mặc định, nếu bạn muốn xử lý các phiên ở phía máy chủ, có một số tiện ích mở rộng bình hỗ trợ điều này.

Tin nhắn nhấp nháy

Các ứng dụng tốt và giao diện người dùng là tất cả về phản hồi. Nếu người dùng không nhận được đủ phản hồi, họ có thể sẽ ghét ứng dụng. Flask cung cấp một cách thực sự đơn giản để cung cấp phản hồi cho người dùng với hệ thống nhấp nháy. Hệ thống nhấp nháy về cơ bản giúp bạn có thể ghi lại một thông báo ở cuối yêu cầu và truy cập vào yêu cầu tiếp theo (và chỉ có). Điều này thường được kết hợp với một mẫu bố cục để hiển thị thông báo.

Để flash một thông báo, hãy sử dụng phương thức

$ export FLASK_APP=hello.py
$ flask run
 * Running on http://127.0.0.1:5000/
51, để có được các tin nhắn bạn có thể sử dụng
@app.route('/projects/')
def projects():
    return 'The project page'

@app.route('/about')
def about():
    return 'The about page'
1 cũng có sẵn trong các mẫu. Kiểm tra tin nhắn nhấp nháy cho một ví dụ đầy đủ.Message Flashing for a full example.

Ghi nhật ký và

Thay đổi

Mới trong phiên bản 0.3.

Đôi khi bạn có thể ở trong một tình huống mà bạn đối phó với dữ liệu cần chính xác, nhưng thực sự thì không. Ví dụ: bạn có thể có một số mã phía máy khách gửi yêu cầu HTTP đến máy chủ nhưng rõ ràng nó bị dị tật. Điều này có thể được gây ra bởi sự giả mạo người dùng với dữ liệu hoặc mã máy khách không thành công. Hầu hết thời gian nó có thể trả lời với

$ export FLASK_APP=hello.py
$ flask run
 * Running on http://127.0.0.1:5000/
53 trong tình huống đó, nhưng đôi khi điều đó đã giành được và mã phải tiếp tục hoạt động.

Bạn vẫn có thể muốn đăng nhập rằng điều gì đó tanh đã xảy ra. Đây là nơi loggers có ích. Theo bình 0,3, một logger được cấu hình sẵn cho bạn sử dụng.

Dưới đây là một số cuộc gọi nhật ký ví dụ:

PS C:\path\to\app> $env:FLASK_APP = "hello.py"
6

$ export FLASK_APP=hello.py
$ flask run
 * Running on http://127.0.0.1:5000/
54 đính kèm là một bản ghi tiêu chuẩn
$ export FLASK_APP=hello.py
$ flask run
 * Running on http://127.0.0.1:5000/
55, vì vậy hãy đến các tài liệu chính thức ____156 để biết thêm thông tin.

Đọc thêm về lỗi ứng dụng.Application Errors.

Kết nối trong WSGI Middleware¶

Để thêm phần mềm trung gian WSGI vào ứng dụng Flask của bạn, hãy kết thúc thuộc tính ____ ____ ____157. Ví dụ: để áp dụng phần mềm trung gian của Werkzeug,

$ export FLASK_APP=hello.py
$ flask run
 * Running on http://127.0.0.1:5000/
58 để chạy phía sau nginx:

PS C:\path\to\app> $env:FLASK_APP = "hello.py"
7

Gói

$ export FLASK_APP=hello.py
$ flask run
 * Running on http://127.0.0.1:5000/
59 thay vì
$ export FLASK_APP=hello.py
$ python -m flask run
 * Running on http://127.0.0.1:5000/
9 có nghĩa là
$ export FLASK_APP=hello.py
$ python -m flask run
 * Running on http://127.0.0.1:5000/
9 vẫn chỉ vào ứng dụng bình của bạn, không phải ở phần mềm trung gian, do đó bạn có thể tiếp tục sử dụng và định cấu hình trực tiếp
$ export FLASK_APP=hello.py
$ python -m flask run
 * Running on http://127.0.0.1:5000/
9.

Sử dụng phần mở rộng bình

Tiện ích mở rộng là các gói giúp bạn hoàn thành các nhiệm vụ chung. Ví dụ, Flask-Sqlalchemy cung cấp hỗ trợ SQLalchemy giúp nó đơn giản và dễ sử dụng với bình.

Để biết thêm về phần mở rộng bình, hãy xem các phần mở rộng.Extensions.

Triển khai đến máy chủ web

Sẵn sàng để triển khai ứng dụng bình mới của bạn? Đi đến các tùy chọn triển khai.Deployment Options.