Flask - Tutorial
Source: https://flask.palletsprojects.com/en/2.2.x/tutorial/
-
Cấu trúc:
- Thư mục chính:
flaskr
,tests
,venv
. instance
: Folder lưu trữ local data (DB?)
- Thư mục chính:
-
DB:
- Connect tới DB dựa vào object
g
,g
object unique cho từng request. - Check nếu ‘db’ không có trong
g
thì mình sẽ add thêm nó vào. Còn khi close_db thì sẽ pop nó ra khỏi object g. - Ta có thể đăng ký command
init-db
ở trong fileflaskr/db.py
. như thế ta có thể dùng command:flask --app flaskr init-db
- Connect tới DB dựa vào object
-
Blueprint:
- Là 1 cách để quản lý Related views and other code. Thay vì việc phải register từng views với app, thì mình sẽ gom các tính năng chung vào 1 chỗ, register nó với Blueprint, sau đó Blueprint sẽ register với app trong (
__init__.py
)
- Là 1 cách để quản lý Related views and other code. Thay vì việc phải register từng views với app, thì mình sẽ gom các tính năng chung vào 1 chỗ, register nó với Blueprint, sau đó Blueprint sẽ register với app trong (
-
Views:
- Term views của bên Flask sẽ giống với Controller của bên Rails
- Muốn hot reload thì có thể setting
debug=True
, hoặc ENV, hoặc sử dụng options--debug
-
Templates
- Giống với
Views
bên Rails. - Tạo base template, sau đó những template khác thì extend từ thằng base này.
- Việc build base và put content trong
block
, tương tự như việc chúng ta sử dụngcontent_for :xxx + yield
bên Rails
- Giống với
-
Static files
- Lưu trong thư mục
static
, sau đó dùngurl_for('static', filename='xxx')
để gọi ra từ templates
- Lưu trong thư mục
-
Packaging:
- Sử dụng
setuptools
để wrapflaskr
thành một module, để có thể cài đặt như 1 package thông thường. - Tạo 2 file
setup.py
vàMANIFEST.in
để put thông tin (version, author, include/exclude files, …) sau đó packaging
- Sử dụng
-
Test
- Format đặt tên file test và function test cần có prefix
test_
- Cần tạo class test, register nó với
@pytest.fixture
, sau đó dùng lại bên filetest_xx.py
riêng. pytest.mark.parametrize
: Gọi test function nhiều lần với các bộ arg khác nhau.- trong
conftest.py
:- Import hàm
create_app
của bên flaskr vào để tạo app. Tại đây đọc filetests/data.sql
để tạo dữ liệu fake (FatoryBot ở đâu????). Close file khi xong test. - Sau khi có app, create client từ app bên trên, gọi
test_client()
để tạo request tới application mà không cần chạy server. - Tạo runner.test_cli_runner() để gọi được Click commands, registered with application.
- Import hàm
- Để test lại data trong DB, cần gọi
app.app_context
, get_db xong execute DB command. coverage run -m pytest
- Format đặt tên file test và function test cần có prefix
Notes
Pytest uses fixtures by matching their function names with the names of arguments in the test functions.
- Deploy
- Python distribution has
.whl
extension. - Build wheel distribution file:
python setup.py bdist_wheel
. File name:{project name}-{version}-{python tag} -{abi tag}-{platform tag}
. After that, we can install this package:pip install flaskr-1.0.0-py3-none-any.whl
- Config lại SECRET_KEY, đặt trong thư mục
flaskr-instance/config.py
- Sử dụng Waitress để chạy server.
- Python distribution has
Questions
- Concept cần biết trong Flask là gì? VD như bên Rails thì cần biết RESTFull Routing, MVC, databases, …