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,gobject unique cho từng request. - Check nếu ‘db’ không có trong
gthì 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
Viewsbê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 + yieldbê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để wrapflaskrthành một module, để có thể cài đặt như 1 package thông thường. - Tạo 2 file
setup.pyvà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.pyriê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_appcủ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
.whlextension. - 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, …