Flask - Tutorial

Source: https://flask.palletsprojects.com/en/2.2.x/tutorial/

  1. Cấu trúc:

    1. Thư mục chính: flaskr, tests, venv.
    2. instance : Folder lưu trữ local data (DB?)
  2. DB:

    1. Connect tới DB dựa vào object g, g object unique cho từng request.
    2. 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.
    3. Ta có thể đăng ký command init-db ở trong file flaskr/db.py . như thế ta có thể dùng command: flask --app flaskr init-db
  3. Blueprint:

    1. 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)
  4. Views:

    1. Term views của bên Flask sẽ giống với Controller của bên Rails
    2. Muốn hot reload thì có thể setting debug=True, hoặc ENV, hoặc sử dụng options --debug
  5. Templates

    1. Giống với Views bên Rails.
    2. Tạo base template, sau đó những template khác thì extend từ thằng base này.
    3. Việc build base và put content trong block , tương tự như việc chúng ta sử dụng content_for :xxx + yield bên Rails
  6. Static files

    1. Lưu trong thư mục static, sau đó dùng url_for('static', filename='xxx') để gọi ra từ templates
  7. Packaging:

    1. Sử dụng setuptools để wrap flaskr thành một module, để có thể cài đặt như 1 package thông thường.
    2. Tạo 2 file setup.pyMANIFEST.in để put thông tin (version, author, include/exclude files, …) sau đó packaging
  8. Test

    1. Format đặt tên file test và function test cần có prefix test_
    2. Cần tạo class test, register nó với @pytest.fixture, sau đó dùng lại bên file test_xx.py riêng.
    3. pytest.mark.parametrize : Gọi test function nhiều lần với các bộ arg khác nhau.
    4. trong conftest.py:
      1. Import hàm create_app của bên flaskr vào để tạo app. Tại đây đọc file tests/data.sql để tạo dữ liệu fake (FatoryBot ở đâu????). Close file khi xong test.
      2. 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.
      3. Tạo runner.test_cli_runner() để gọi được Click commands, registered with application.
    5. Để test lại data trong DB, cần gọi app.app_context, get_db xong execute DB command.
    6. coverage run -m pytest

Notes

Pytest uses fixtures by matching their function names with the names of arguments in the test functions.

  1. Deploy
    1. Python distribution has .whl extension.
    2. 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
    3. Config lại SECRET_KEY, đặt trong thư mục flaskr-instance/config.py
    4. Sử dụng Waitress để chạy server.

Questions

  • Concept cần biết trong Flask là gì? VD như bên Rails thì cần biết RESTFull Routing, MVC, databases, …