Thursday, November 21, 2024

[Flask] – Phần 1: Hello World!

-

1. Đối tượng hướng dẫn.

Hướng dẫn này đã được chuẩn bị cho bất kỳ ai có kiến thức cơ bản về ngôn ngữ lập trình Python và muốn phát triển trang web. Sau khi hoàn thành hướng dẫn này, bạn sẽ có kiến thức cơ bản về việc phát triển trang web bằng Flask.

2. Flask là gì?

Flask là một framework phát triển ứng dụng web bằng ngôn ngữ Python. Nó cho phép bạn xây dựng các ứng dụng web từ những ứng dụng đơn giản đến phức tạp, dễ dàng và nhanh chóng. Flask được thiết kế để làm việc như một thư viện nhỏ và linh hoạt, giúp bạn tập trung vào việc xây dựng ứng dụng của mình mà không phải quá lo lắng về các yêu cầu phức tạp của một framework lớn.

Một số đặc điểm và ưu điểm của Flask bao gồm:

  • Lightweight (nhẹ nhàng): Flask có thiết kế nhỏ gọn và chỉ bao gồm những thành phần cơ bản cần thiết để xây dựng ứng dụng web, điều này giúp giảm độ phức tạp và tối ưu hóa hiệu suất.
  • Jinja2 templates: Flask tích hợp Jinja2, một hệ thống templates mạnh mẽ cho phép bạn tách biệt code Python và giao diện người dùng trong ứng dụng của mình.
  • Werkzeug toolkit: Flask sử dụng Werkzeug, một toolkit WSGI (Web Server Gateway Interface) mạnh mẽ, giúp xử lý các yêu cầu và phản hồi HTTP một cách dễ dàng.
  • Cộng đồng phát triển mạnh mẽ: Flask có một cộng đồng lớn và tích cực, cung cấp nhiều tài liệu, plugin và hỗ trợ hữu ích từ cộng đồng.
  • Mở rộng linh hoạt: Bạn có thể mở rộng Flask bằng cách sử dụng các tiện ích và plugin có sẵn hoặc tự viết các extension cho nhu cầu cụ thể của ứng dụng.

Với những tính năng và ưu điểm trên, Flask đã trở thành một lựa chọn phổ biến cho các nhà phát triển Python khi xây dựng các ứng dụng web.

3. Các yêu cầu của hệ thống để chạy Flask.

Khi bạn chạy Flask, bạn cần có một hệ điều hành (OS – Operating System) hỗ trợ Python và có đủ các yêu cầu cơ bản để cài đặt và chạy môi trường Flask. Dưới đây là các yêu cầu cơ bản để chạy Flask trên một hệ điều hành:

  • Python: Flask là một framework web cho ngôn ngữ lập trình Python, vì vậy bạn cần cài đặt Python trên hệ điều hành của mình. Flask hỗ trợ Python 3.x, nên bạn nên sử dụng phiên bản Python mới nhất từ dòng 3.x.
  • PIP: PIP là trình quản lý gói Python dùng để cài đặt các thư viện bổ sung và Flask. Bạn nên cài đặt PIP để cài đặt các gói cần thiết cho Flask.
  • Virtual Environment (Tùy chọn): Mặc dù không bắt buộc, nhưng tốt nhất là bạn nên sử dụng môi trường ảo (virtual environment) để cô lập các môi trường của Flask và ứng dụng của bạn khỏi hệ thống chính. Điều này giúp tránh xung đột và xung đột giữa các phiên bản của các thư viện khác nhau khi bạn phát triển nhiều dự án.
  • Các thư viện phụ thuộc (Dependencies): Flask phụ thuộc vào một số thư viện Python khác, như Jinja2 (để templates), Werkzeug (để WSGI), và các thư viện khác như click, itsdangerous, MarkupSafe. Các thư viện này sẽ được cài đặt tự động khi bạn cài đặt Flask.
  • Web Server Gateway Interface (WSGI): Flask sử dụng WSGI để kết nối với các máy chủ web. Trên hầu hết các hệ điều hành, WSGI đã được tích hợp sẵn trong Python.
  • Môi trường thực thi (Runtime Environment): Flask cần môi trường thực thi Python để chạy. Điều này bao gồm trình thông dịch Python, các thư viện cần thiết và hệ thống file.

Khi bạn đã đảm bảo các yêu cầu trên đều đáp ứng, bạn có thể cài đặt và chạy Flask trên hệ điều hành của mình và phát triển các ứng dụng web Python bằng Flask một cách dễ dàng.

4. Thực hành chạy Flask với chương trình Hello World.

4.1. Chuẩn bị môi trường cần thiết.

  • Chuẩn bị OS, mình sử dụng Ubuntu 22.04.
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.3 LTS
Release:        22.04
Codename:       jammy

Mình sử dụng Python 3.10.12.

$ python3 --version
Python 3.10.12

Cập nhật danh sách các gói phần mềm mới nhất có sẵn từ các nguồn (repositories) được cấu hình trong hệ thống.

apt-get update

Cài đặt Python3.

apt install python3-pip -y

Mình đã sử dụng Pip phiên bản 22.0.2 với Python 3.10.

$ pip -V
pip 22.0.2 from /usr/lib/python3/dist-packages/pip (python 3.10)

Cài đặt môi trường ảo chạy trên Python 3.10.

apt install python3.10-venv python3-virtualenv -y

Đây là phiên bản Python Virtualenv mình đã cài đặt.

$ virtualenv --version
virtualenv 20.13.0+ds from /usr/lib/python3/dist-packages/virtualenv/__init__.py

Dùng Python Virtualenv đã cài đặt xong để tạo môi trường ảo.

cd /home
mkdir myproject
cd myproject
python3 -m venv .venv

Ngay lập tức, bạn sẽ có 1 thư mục .venv được tạo bằng lệnh python3 -m venv .venv trong thư mục myproject.

$ ls -al
total 12
drwxr-xr-x 3 root root 4096 Sep  5 02:39 .
drwxr-xr-x 3 root root 4096 Sep  5 02:38 ..
drwxr-xr-x 5 root root 4096 Sep  5 02:39 .venv

Kích hoạt môi trường ảo này bằng lệnh.

. .venv/bin/activate

Bạn sẽ có giao diện của CLI như dưới.

$ . .venv/bin/activate
(.venv) root@flask-13-200:/home/myproject#

Tiếp theo bạn cài đặt Flask, bạn có thể vào https://flask.palletsprojects.com để xem thông tin về các phiên bản, cách cài đặt, hướng dẫn sử dụng,… của Flask.

Ở trong môi trường ảo mình sử dụng lệnh pip install Flask để cài đặt Flask.

$ pip install Flask
Collecting Flask
  Downloading flask-2.3.3-py3-none-any.whl (96 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 96.1/96.1 KB 832.9 kB/s eta 0:00:00
Collecting itsdangerous>=2.1.2
  Downloading itsdangerous-2.1.2-py3-none-any.whl (15 kB)
Collecting Jinja2>=3.1.2
  Downloading Jinja2-3.1.2-py3-none-any.whl (133 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 133.1/133.1 KB 3.5 MB/s eta 0:00:00
Collecting Werkzeug>=2.3.7
  Downloading werkzeug-2.3.7-py3-none-any.whl (242 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 242.2/242.2 KB 1.8 MB/s eta 0:00:00
Collecting blinker>=1.6.2
  Downloading blinker-1.6.2-py3-none-any.whl (13 kB)
Collecting click>=8.1.3
  Downloading click-8.1.7-py3-none-any.whl (97 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 97.9/97.9 KB 1.7 MB/s eta 0:00:00
Collecting MarkupSafe>=2.0
  Downloading MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (25 kB)
Installing collected packages: MarkupSafe, itsdangerous, click, blinker, Werkzeug, Jinja2, Flask
Successfully installed Flask-2.3.3 Jinja2-3.1.2 MarkupSafe-2.1.3 Werkzeug-2.3.7 blinker-1.6.2 click-8.1.7 itsdangerous-2.1.2

Sau khi bạn thực hiện tất cả các bước trên, Flask sẽ được cài đặt và sẵn sàng để phát triển các ứng dụng web Python trên môi trường ảo “flask” của bạn.

4.2. Khởi tạo ứng dụng Hello World đơn giản.

Đầu tiên, bạn tạo một thư mục có tên là “myapp” (có thể là bất kỳ tên nào bạn muốn) và trong thư mục này, bạn tạo một file có tên là “app.py”. File này sẽ chứa code Python để xây dựng ứng dụng web.

mkdir -p myapp
cd myapp

Đoạn code này sử dụng Flask để tạo một ứng dụng web đơn giản.

cat > app.py << 'OEF'
from flask import Flask

app = Flask(__name__)
@app.route('/')
def hello_world():
    return "<h1>Hello, World</h1>"

if __name__=="__main__":
    app.run()
OEF

Mã nguồn trên là một đoạn code Python sử dụng framework Flask để tạo một ứng dụng web cơ bản. Dưới đây là giải thích từng dòng lệnh:

  • from flask import Flask: Dòng này import lớp Flask từ module flask. Flask là lớp chính của Flask framework, cho phép bạn tạo ứng dụng web.
  • app = Flask(__name__): Dòng này tạo một đối tượng ứng dụng Flask với tên là app. Đối tượng này sẽ được sử dụng để định nghĩa các route và xử lý yêu cầu HTTP.
  • @app.route('/'): Dòng này đánh dấu hàm hello_world là một route của ứng dụng Flask. Nó cho phép bạn xử lý các yêu cầu được gửi đến đường dẫn gốc (‘/’) của ứng dụng.
  • def hello_world():: Dòng này định nghĩa hàm hello_world(), là hàm xử lý cho route ‘/’ mà chúng ta đã đánh dấu ở trên.
  • return "Hello, World": Hàm hello_world này trả về chuỗi “Hello, World” khi được gọi. Nghĩa là khi bạn truy cập route ‘/’, trang web sẽ hiển thị nội dung “Hello, World”.
  • if __name__=="__main__":: Đây là một điều kiện kiểm tra xem script này có được chạy trực tiếp (thay vì được import từ một file khác) hay không.
  • app.run(): Dòng này chạy ứng dụng Flask trên máy chủ ở chế độ debug mặc định. Khi bạn chạy mã này, ứng dụng Flask sẽ lắng nghe trên cổng mặc định (5000) và bạn có thể truy cập nó từ trình duyệt web.

Sau khi chuẩn bị xong, file của bạn sẽ có cấu trúc như sau:

../myapp/
└── app.py

0 directories, 1 file

4.3. Chạy Ứng dụng.

Sau khi chuẩn bị file code xong bạn có thẻ chạy ứng dụng bằng lệnh flask run. Khi ứng dụng đang chạy, kết quả sẽ tương tự như sau:

$ flask run --host=0.0.0.0
 * Debug mode: off
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
 * Running on all addresses (0.0.0.0)
 * Running on http://127.0.0.1:5000
 * Running on http://192.168.13.200:5000
Press CTRL+C to quit

Khi bạn chạy lệnh này, ứng dụng Flask sẽ lắng nghe trên tất cả các địa chỉ IP của máy tính, cho phép các máy khác trong mạng LAN của bạn truy cập ứng dụng qua địa chỉ IP máy tính của bạn.

Lưu ý rằng khi bạn sử dụng 0.0.0.0 để lắng nghe, hãy cẩn thận và chỉ chạy ứng dụng Flask này trong môi trường phát triển hoặc các môi trường đáng tin cậy, không nên chạy ở môi trường mạng công cộng hoặc Internet mà không có các biện pháp bảo mật thích hợp. Việc lắng nghe trên địa chỉ 0.0.0.0 có thể làm cho máy tính của bạn trở nên nhạy cảm với các yêu cầu đến từ bên ngoài, nếu không được bảo mật cẩn thận, điều này có thể dẫn đến vấn đề bảo mật nghiêm trọng.

Bạn có thể thêm các tham số app.run(debug=True, host='0.0.0.0', port=5000) để bật tính năng debug, ngoài ra nếu bạn để debug=True thì khi bạn lưu lại file code, Flask sẽ tự động cập nhật và chạy lại code, bạn sẽ không cần phải CTRL + C để thoát và chạy lại nữa.

from flask import Flask

app = Flask(__name__)
@app.route('/')
def hello_world():
    return "<h1>Hello, World</h1>"

if __name__=="__main__":
    app.run(debug=True, host='0.0.0.0', port=5000)

Tham số host='0.0.0.0'port=5000 thì đơn giản nên mình không giải thích thêm. Và sau đó bạn cũng có thể dùng lệnh python <tên_filecode> để chạy ứng dụng. Ví dụ.

$ python3 app.py 
 * Serving Flask app 'app'
 * Debug mode: on
 * Running on all addresses (0.0.0.0)
 * Running on http://127.0.0.1:5000
 * Running on http://192.168.13.200:5000
Press CTRL+C to quit
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 947-129-701

4.4. Kiểm tra ứng dụng.

Mở một trình duyệt và nhập URL http://192.168.13.200:5000/. Bạn sẽ thấy văn bản “Hello, World!" trong thẻ <h1> như một phản hồi. Điều này xác nhận ứng dụng của bạn đang chạy thành công.

Nếu bạn muốn dừng chạy Server hãy bấm phím CTRL+C.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories