Python thành viên tĩnh

Tiếp theo chúng ta 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 của ứ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ó được bắt đầu dưới dạng ứng dụng hay được nhập dưới dạng mô-đun, tên sẽ khác (
$ 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 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

  • 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 để cho Flask biết URL nào sẽ kích hoạt chức năng của chúng tôi

  • Hàm được đặ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 là
    $ export FLASK_APP=hello.py
    $ python -m flask run
     * Running on http://127.0.0.1:5000/
    
    4 vì điều này sẽ xung đột với chính Flask

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

    $ export FLASK_APP=hello.py
    $ python -m flask run
     * Running on http://127.0.0.1:5000/
    
    5 của python với Flask. Trước khi bạn có thể làm điều đó, bạn cần báo cho thiết bị đầu cuối biết ứng dụng sẽ 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

    ________số 8

    Nếu bạn đang dùng Windows, cú pháp biến 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 python -m bình

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

    Điều này khởi chạy một máy chủ dựng sẵn rất đơn giản, đủ tốt để thử nghiệm nhưng có thể không phải thứ bạn muốn sử dụng trong sản xuất. Để biết các tùy chọn triển khai, hãy xem Tùy chọn triển khai .

    Bây giờ hãy truy cập http. //127. 0. 0. 1. 5000/, và bạn sẽ thấy lời chào thế giới của bạn

    Máy chủ hiển thị 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 được từ máy tính của bạn, không thể truy cập từ bất kỳ máy chủ nào khác trong mạng. Đây là mặc định 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 đã 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ể đặt máy chủ ở chế độ công khai 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

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

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

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

    Trong trường hợp python -m bình bị lỗi hoặc bình không tồn tại, có nhiều lý do có thể xảy ra trường hợp này. Trước hết bạn cần xem thông báo lỗi

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

    Phiên bản Flask cũ hơn 0. 11 đã từng có nhiều cách khác nhau để khởi động ứng dụng. Nói tóm lại, lệnh jar không tồn tại và python -m jar cũng vậy. Trong trường hợp đó bạn có hai lựa chọn. nâng cấp lên các phiên bản Flask mới hơn hoặc xem tài liệu Máy chủ phát triển để xem phương pháp thay thế để chạy máy chủ.

    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 cần nhập khi chạy bình. 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 tính năng 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 và tại sao nó không thành công

    Lý do phổ biến nhất là do lỗi đánh máy hoặc do 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¶

    (Bạn chỉ muốn ghi nhật ký lỗi và dấu vết ngăn xếp? Xem Lỗi ứng dụng )

    Tập lệnh bình rất tốt để khởi động máy chủ phát triển cục bộ, nhưng bạn sẽ phải khởi động lại thủ công sau mỗi lần thay đổi mã của mình. Điều đó không hay lắm và Flask 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 mã thay đổi và nó cũng sẽ cung cấp cho bạn trình gỡ lỗi hữu ích nếu xảy ra sự cố

    Để kích hoạt tất cả các tính năng phát triển (bao gồm cả chế độ gỡ lỗi), bạn có thể 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/
    
    30 và đặt nó thành
    $ export FLASK_APP=hello.py
    $ python -m flask run
     * Running on http://127.0.0.1:5000/
    
    31 trước khi chạy máy chủ

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

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

    $ export FLASK_APP=hello.py
    $ python -m flask run
     * Running on http://127.0.0.1:5000/
    
    32 thay vì
    $ export FLASK_APP=hello.py
    $ python -m flask run
     * Running on http://127.0.0.1:5000/
    
    33. )

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

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

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

    3. nó kích hoạt chế độ gỡ lỗi trên ứng dụng Flask

    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

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

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

    Chú ý

    Mặc dù trình gỡ lỗi tương tác không hoạt động trong môi trường forking (khiến nó 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 các máy sản xuất

    Ảnh chụp màn hình của trình gỡ lỗi đang hoạt động

    Python thành viên tĩnh

    Bạn có thể tìm thêm thông tin về cách sử dụng trình gỡ lỗi trong tài liệu Werkzeug

    Bạn có nghĩ đến một trình gỡ lỗi khác không? . 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 một URL có ý nghĩa mà họ có thể nhớ và sử dụng để truy cập trực tiếp vào 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 một URL

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

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

    Quy tắc biến¶

    Bạn có thể thêm các phần có thể thay đổi vào một URL bằng cách đánh dấu các phần bằng

    $ export FLASK_APP=hello.py
    $ python -m flask run
     * Running on http://127.0.0.1:5000/
    
    36. Sau đó, chức năng của bạn sẽ nhận được
    $ export FLASK_APP=hello.py
    $ python -m flask run
     * Running on http://127.0.0.1:5000/
    
    36 làm đối số từ khóa. Theo tùy chọn, bạn có thể sử dụng trình chuyển đổi để chỉ định loại đối số như
    $ export FLASK_APP=hello.py
    $ python -m flask run
     * Running on http://127.0.0.1:5000/
    
    38

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

    các loại bộ chuyển đổi

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

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

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

    chấp nhận số nguyên dương

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

    chấp nhận các giá trị dấu phẩy động dương

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

    như

    $ export FLASK_APP=hello.py
    $ python -m flask run
     * Running on http://127.0.0.1:5000/
    
    39 nhưng cũng chấp nhận dấu gạch chéo

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

    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 về cách sử dụng dấu gạch chéo ở cuối

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

    URL chuẩn cho điểm cuối

    $ export FLASK_APP=hello.py
    $ python -m flask run
     * Running on http://127.0.0.1:5000/
    
    85 có dấu gạch chéo ở cuối. Nó tương tự như một thư mục trong một hệ thống tập tin. Nếu bạn truy cập URL mà không có dấu gạch chéo ở cuối, Flask sẽ chuyển hướng bạn đến URL chuẩn có dấu gạch chéo ở cuối

    URL chuẩn cho điểm cuối

    $ export FLASK_APP=hello.py
    $ python -m flask run
     * Running on http://127.0.0.1:5000/
    
    86 không có dấu gạch chéo ở cuối. Nó tương tự như tên đường dẫn của một tập tin. Truy cập URL có 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 là 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 hai lần cho cùng một trang

    Xây dựng URL¶

    Để tạo URL cho một chức năng cụ thể, hãy sử dụng hàm

    $ export FLASK_APP=hello.py
    $ python -m flask run
     * Running on http://127.0.0.1:5000/
    
    87. Nó chấp nhận tên của hàm làm đố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 thêm vào URL dưới dạng tham số truy vấn

    Tại sao bạn muốn tạo URL bằng chức năng đảo ngược URL

    $ export FLASK_APP=hello.py
    $ python -m flask run
     * Running on http://127.0.0.1:5000/
    
    87 thay vì mã hóa cứng chúng vào mẫu của bạn?

    1. Đảo ngược thường mang tính mô tả hơn là mã hóa cứng các URL

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

    3. Xây dựng URL xử lý thoát 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 tuyệt đối, tránh hành vi không mong muốn 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_APP=hello.py
      $ python -m flask run
       * Running on http://127.0.0.1:5000/
      
      89 thay vì
      PS C:\path\to\app> $env:FLASK_APP = "hello.py"
      
      30, thì
      $ export FLASK_APP=hello.py
      $ python -m flask run
       * Running on http://127.0.0.1:5000/
      
      87 sẽ xử lý việc đó cho bạn một cách thích hợp

    Ví dụ, ở đây chúng ta sử dụng phương pháp

    PS C:\path\to\app> $env:FLASK_APP = "hello.py"
    
    32 để thử
    $ export FLASK_APP=hello.py
    $ python -m flask run
     * Running on http://127.0.0.1:5000/
    
    87.
    PS C:\path\to\app> $env:FLASK_APP = "hello.py"
    
    32 yêu cầu Flask hành xử như thể nó đang xử lý một yêu cầu ngay cả khi chúng ta sử dụng trình bao Python. Xem Cục ngữ cảnh .

    $ 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 thức HTTP¶

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

    PS C:\path\to\app> $env:FLASK_APP = "hello.py"
    
    35. Bạn có thể sử dụng đối số
    PS C:\path\to\app> $env:FLASK_APP = "hello.py"
    
    36 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 thức HTTP khác nhau

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

    Nếu có

    PS C:\path\to\app> $env:FLASK_APP = "hello.py"
    
    35, Flask sẽ tự động thêm hỗ trợ cho phương thức
    PS C:\path\to\app> $env:FLASK_APP = "hello.py"
    
    39 và xử lý yêu cầu
    PS C:\path\to\app> $env:FLASK_APP = "hello.py"
    
    39 theo HTTP RFC. Tương tự như vậy,
    PS C:\path\to\app> $env:FLASK_APP = "hello.py"
    
    71 được triển khai tự động cho bạn

    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 định cấu hình để phục vụ chúng cho bạn, nhưng trong quá trình phát triển, Flask cũng có thể làm điều đó. Chỉ cần tạo một thư mục có tên là

    PS C:\path\to\app> $env:FLASK_APP = "hello.py"
    
    72 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
    PS C:\path\to\app> $env:FLASK_APP = "hello.py"
    
    73 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

    PS C:\path\to\app> $env:FLASK_APP = "hello.py"
    
    74 đặ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 dưới dạng

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

    Mẫu kết xuất¶

    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ự thoát HTML để giữ an toàn cho ứng dụng. Do đó, Flask sẽ tự động định cấu hình công cụ mẫu Jinja2 cho bạn

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

    PS C:\path\to\app> $env:FLASK_APP = "hello.py"
    
    76. 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 dưới dạng đối số từ khóa. Đây là một ví dụ đơn giản về cách kết xuất một mẫu

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

    Flask sẽ tìm các mẫu trong thư mục

    PS C:\path\to\app> $env:FLASK_APP = "hello.py"
    
    77. Vì vậy, nếu ứng dụng của bạn là một mô-đun, thì thư mục này nằm bên cạnh mô-đun đó, nếu đó là một gói thì nó thực sự nằm trong gói của bạn

    Trường hợp 1. một mô-đun

    $ 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

    $ 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

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

    PS C:\path\to\app> $env:FLASK_APP = "hello.py"
    
    78,
    PS C:\path\to\app> $env:FLASK_APP = "hello.py"
    
    79 và
    $ export FLASK_APP=hello.py
    $ python -m flask run
     * Running on http://127.0.0.1:5000/
    
    40 1 cũng như hàm
    $ export FLASK_APP=hello.py
    $ python -m flask run
     * Running on http://127.0.0.1:5000/
    
    41

    Các mẫu đặc biệt hữu ích nếu sử dụng tính kế thừa. Nếu bạn muốn biết cách thức hoạt động của nó, hãy xem tài liệu về mẫu Kế thừa mẫu . Về cơ bản, kế thừa mẫu giúp giữ lại một số thành phần nhất định trên mỗi trang (như đầu trang, điều hướng và chân trang).

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

    $ export FLASK_APP=hello.py
    $ python -m flask run
     * Running on http://127.0.0.1:5000/
    
    42 chứa HTML, nó sẽ tự động thoát. Nếu bạn có thể tin cậy một biến và bạn biết rằng biến đó sẽ là HTML an toàn (ví dụ vì nó đến từ một mô-đun chuyển đổi đánh dấu wiki sang HTML), bạn có thể đánh dấu biến đó là an toàn bằng cách sử dụng lớp
    $ export FLASK_APP=hello.py
    $ python -m flask run
     * Running on http://127.0.0.1:5000/
    
    43 hoặc bằng cách sử dụng bộ lọc
    $ export FLASK_APP=hello.py
    $ python -m flask run
     * Running on http://127.0.0.1:5000/
    
    44 trong . Truy cập tài liệu Jinja 2 để biết thêm ví dụ

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

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

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

    Nhật ký thay đổi

    Đã thay đổi trong phiên bản 0. 5. Tự động thoát không còn được bật cho tất cả các mẫu. Các phần mở rộng sau cho các mẫu kích hoạt tự động thoát. ________ 346, ________ 347, ________ 348, ________ 349. Các mẫu được tải từ một chuỗi sẽ bị tắt tự động thoát.

    1

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

    $ export FLASK_APP=hello.py
    $ python -m flask run
     * Running on http://127.0.0.1:5000/
    
    40 đó là gì? . Using SQLite 3 with Flask for more information.

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

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

    PS C:\path\to\app> $env:FLASK_APP = "hello.py"
    
    78. 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ể là toàn cầu và cách Flask quản lý để vẫn an toàn cho luồng. Câu trả lời là bối cảnh địa phương

    Ngữ cảnh cục bộ¶

    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ể triển khai các thử nghiệm với ngữ cảnh cục bộ, hãy đọc phần này, nếu không thì hãy bỏ qua nó

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

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

    Vậy nó có nghĩa gì đối với bạn? . Bạn sẽ nhận thấy rằng mã phụ thuộc vào đối tượng yêu cầu sẽ đột ngột bị hỏng 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à liên kết nó với ngữ cảnh. Giải pháp đơn giản nhất để kiểm tra đơn vị là sử dụng trình quản lý ngữ cảnh

    PS C:\path\to\app> $env:FLASK_APP = "hello.py"
    
    32. 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ẽ ràng buộc một yêu cầu kiểm tra để 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 sang phương thức

    $ 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 về nó ở đây (xem

    $ export FLASK_APP=hello.py
    $ flask run
     * Running on http://127.0.0.1:5000/
    
    06). Dưới đây là tổng quan 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 khả dụng 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? . 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 như vậy, trang lỗi HTTP 400 Bad Request sẽ hiển thị thay thế. Vì vậy, trong 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 bằng 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à hiển thị cho họ một trang yêu cầu không hợp lệ 400 trong trường hợp đó là không thân thiện với người dùng

    Để biế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 xem tài liệu

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

    Tệp tải lên¶

    Bạn có thể xử lý các tệp đã tải lên bằng Flask một cách 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ẽ hoàn toàn không truyền tệp của bạn

    Các tệp đã 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. 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 đã 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ó một 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 của máy chủ. Đây là một ví dụ đơn giản cho thấy nó hoạt động như thế nào

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

    Nếu bạn muốn biết cách 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ể bị giả mạo nên đừng bao giờ tin vào 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

    Để biết một số ví dụ hay hơn, hãy xem mẫu Tải tệp lên .

    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 pháp đố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 tải. Nếu bạn muốn sử dụng phiên, đừng sử dụng cookie trực tiếp mà thay vào đó hãy sử dụng Phiên trong Flask để thêm một số bảo mật vào đầu cookie cho bạn.

    Đọ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ỉ cần trả về các chuỗi từ chế độ xem nên các hàm Flask sẽ chuyển đổi chúng thành các đối tượng phản hồi cho bạn. Nếu bạn muốn làm điều đó một cách rõ ràng, 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 và sau đó sửa đổi nó

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

    Để biết điều này, hãy xem thêm Giới thiệu về phản hồi .

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

    Để chuyển hướng người dùng đến một đ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;

    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 trang mà họ không thể truy cập (401 có nghĩa là quyền truy cập bị từ chối) nhưng nó cho thấy cách thức hoạt động của nó

    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
    PS C:\path\to\app> $env:FLASK_APP = "hello.py"
    
    76. Điều này nói với Flask rằng mã trạng thái của trang đó phải là 404, nghĩa là không tìm thấy. Theo mặc định, 200 được giả định có nghĩa là. tất cả đều tốt

    Xem Trình xử lý lỗi để biết thêm chi tiết.

    Giới thiệu về Phản hồi¶

    Giá trị trả về từ chức năng 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 thì nó được chuyển đổi thành một đối tượng phản hồi với chuỗi dưới dạng nội dung 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à kiểu mô phỏng văn bản/html. Nếu giá trị trả về là một lệnh, thì
    $ export FLASK_APP=hello.py
    $ flask run
     * Running on http://127.0.0.1:5000/
    
    35 được gọi để tạo phản hồi. Logic mà Flask áp dụng để chuyển đổi giá trị trả về thành đối tượng phản hồi như sau

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

    2. Nếu đó 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 đó là lệnh, 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 bộ dữ liệu được trả về, các mục trong bộ dữ liệu 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ác giá trị tiêu đề bổ sung

    5. Nếu không cái nào hoạt động, Flask sẽ coi giá trị trả về là một ứ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 dạng 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 bọc biểu thức trả về bằng

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

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

    API với JSON¶

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

    $ export FLASK_APP=hello.py
    $ flask run
     * Running on http://127.0.0.1:5000/
    
    44 từ mộ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 phản hồi JSON cho các loại khác với

    $ export FLASK_APP=hello.py
    $ flask run
     * Running on http://127.0.0.1:5000/
    
    44. Trong trường hợp đó, hãy sử dụng hàm
    $ export FLASK_APP=hello.py
    $ flask run
     * Running on http://127.0.0.1:5000/
    
    35, hàm này sẽ tuần tự hóa mọi loại dữ liệu JSON được hỗ trợ. Hoặc xem xét các tiện ích mở rộng cộng đồng 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 có tên là

    PS C:\path\to\app> $env:FLASK_APP = "hello.py"
    
    79 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 các cookie cho bạn và ký tên vào các cookie bằng mật mã. Điều này có nghĩa là người dùng có thể xem nội dung 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 phiên, bạn phải đặt khóa bí mật. Đây là cách các phiên làm việc

    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 cho 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

    Khóa bí mật phải càng ngẫu nhiên càng tốt. Hệ điều hành của bạn có nhiều cách để tạo dữ liệu khá ngẫu nhiên dựa trên trình tạo mã hóa ngẫu nhiên. 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 ý về các phiên dựa trên cookie. Flask sẽ lấy các giá trị bạn đưa vào đối tượng phiên và tuần tự hóa chúng thành cookie. Nếu bạn thấy một số giá trị không tồn tại trong 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 phản hồi trang của bạn so với kích thước được trình duyệt web hỗ trợ

    Bên cạnh các phiên dựa trên phía máy khách mặc định, thay vào đó, 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 Flask hỗ trợ điều này

    Tin nhắn nhấp nháy¶

    Các ứng dụng và giao diện người dùng tốt là tất cả về thông tin 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 để đưa ra phản hồi cho người dùng với hệ thống nhấp nháy. Về cơ bản, hệ thống nhấp nháy cho phép ghi lại một tin nhắn ở cuối yêu cầu và truy cập nó trong yêu cầu tiếp theo (và chỉ tiếp theo). Đ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 tin nhắn, hãy sử dụng phương pháp

    $ export FLASK_APP=hello.py
    $ flask run
     * Running on http://127.0.0.1:5000/
    
    51, để giữ các tin nhắn, bạn có thể sử dụng
    $ export FLASK_APP=hello.py
    $ python -m flask run
     * Running on http://127.0.0.1:5000/
    
    41 cũng có sẵn trong các mẫu. Kiểm tra Tin nhắn nhấp nháy để biết ví dụ đầy đủ.

    Ghi nhật ký¶

    Nhật ký thay đổi

    Mới trong phiên bản 0. 3

    Đôi khi bạn có thể rơi vào tình huống xử lý dữ liệu lẽ ra phải chính xác nhưng thực tế lại không phải vậy. 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 nó rõ ràng là không đúng định dạng. Điều này có thể do người dùng giả mạo dữ liệu hoặc mã máy khách bị lỗi. Hầu hết thời gian bạn có thể trả lời bằng

    $ 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 đó không hiệu quả và mã phải tiếp tục hoạt động

    Bạn vẫn có thể muốn đăng nhập rằng một cái gì đó khó hiểu đã xảy ra. Đây là nơi logger có ích. Kể từ bình 0. 3 một bộ ghi được cấu hình sẵn để 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 nhật ký tiêu chuẩn của
    $ export FLASK_APP=hello.py
    $ flask run
     * Running on http://127.0.0.1:5000/
    
    55, vì vậy hãy truy cập tài liệu chính thức của
    $ export FLASK_APP=hello.py
    $ flask run
     * Running on http://127.0.0.1:5000/
    
    56 để biết thêm thông tin

    Đọc thêm về Lỗi ứng dụng .

    Kết nối trong Middleware WSGI¶

    Để thêm phần mềm trung gian WSGI vào ứng dụng Flask của bạn, hãy bọc thuộc tính

    $ export FLASK_APP=hello.py
    $ flask run
     * Running on http://127.0.0.1:5000/
    
    57 của ứng dụng. Ví dụ: để áp dụng phần mềm trung gian
    $ export FLASK_APP=hello.py
    $ flask run
     * Running on http://127.0.0.1:5000/
    
    58 của Werkzeug để 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 trỏ vào ứng dụng Flask của bạn chứ không phải phần mềm trung gian, vì vậy bạn có thể tiếp tục sử dụng và định cấu hình trực tiếp cho
    $ 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 Flask¶

    Tiện ích mở rộng là các gói giúp bạn hoàn thành các tác vụ thông thường. Ví dụ: Flask-SQLAlchemy cung cấp hỗ trợ SQLAlchemy giúp việc sử dụng Flask trở nên đơn giản và dễ dàng