Css jinja2

Django và Flask là hai web-framework phổ biến nhất – thành công nhất của Python. Ngày nay, khi nhìn vào các bảng tuyển dụng, sẽ thường thấy yêu cầu Django để làm web nhưng Flask đang dần trở thành công cụ quen thuộc của giới làm dữ liệu. Nếu ai có hỏi “nên học cái nào” thì câu trả lời chuẩn nhất chỉ có một. nên học cả hai

  11 mẹo học Python dành cho “newbie”

  71 đoạn mã trích dẫn Python cho các vấn đề hàng ngày của bạn

Web framework là gì

Một framework là một bộ thư viện, thường bao gồm nhiều tính năng phục vụ đưa ra sản phẩm cuối cùng chạm tới người dùng. Ví dụ 

pip install django
5 là một thư viện, chỉ cung cấp tính năng HTTP client, hay 
pip install django
6 chỉ cung cấp tính năng bóc tách/truy cập dữ liệu HTML, hay 
pip install django
7 là thư viện giúp truy cập và tương tác với cơ sở dữ liệu, thì Flask/Django cung cấp . Frame trong tiếng Anh có nghĩa là “khung”, framework cung cấp các khung, lập trình viên điền những thứ mình muốn vào đó, framework sẽ tự chạy. Vì vậy khi sử dụng framework, sẽ có cảm giác như ta không biết nó hoạt động thế nào, chỉ biết là điền đúng những yêu cầu thì nó sẽ hoạt động

Css jinja2
Css jinja2

Django là framework đầy đủ (full-fledge), có đủ mọi thứ, nên sẽ càng có thêm cảm giác ta chỉ thiếu chút nữa là nó tự chạy, mọi thứ đều có khuôn mẫu sạch sẽ rồi. Flask là micro-framework, chỉ có các phần khung cơ bản, các phần còn lại cho phép người dùng tùy chọn mà bổ sung vào, nên có phần dễ hiểu hơn, màu sắc ít được phép hơn.

Cũng vì sự khác biệt này, dẫn đến tài liệu trang chủ của 2 framework viết rất khác nhau. Flask into life bằng một trang web sử dụng 7 dòng mã, khiến người dùng rất dễ học, dễ bắt đầu với sự đơn giản này. Còn Django lại sử dụng ví dụ phức tạp, mặc định người dùng sẽ cần làm thứ “phức tạp” như vậy nên học thế cho quen

Thế nhưng nếu không dựa vào 2 cái hướng dẫn đấy để đánh giá, liệu Django có phức tạp hơn Flask hay thậm chí còn đơn giản hơn? . 1. số khái niệm bạn cần biết 2. số dòng mã bạn cần viết

Start

Cài đặt

Cài đặt Flask

pip install flask

Cài đặt Django

pip install django

Kết quả. hòa, dễ dàng như nhau.

pip install django
8

Viết website hello world và hello mình

Bình giữ nhiệt

Tạo 1 tệp tên bất kỳ nhưng đặt tốt nhất là 

pip install django
9 (đối đối không đặt là 
1 from flask import Flask
2 app = Flask("my website")
3
4 @app.route("/")
5 def hello_world():
6    return "Hello world"
7
8 @app.route("/hello/")
9 def hello(name):
10    return "Hello {}".format(name)
0 do trùng tên bình)

1 from flask import Flask
2 app = Flask("my website")
3
4 @app.route("/")
5 def hello_world():
6    return "Hello world"
7
8 @app.route("/hello/")
9 def hello(name):
10    return "Hello {}".format(name)

Chạy, theo hướng dẫn trên trang chủ (nếu sử dụng Windows để xem lệnh tương ứng)

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

Điểm ấn tượng nhất ở đây là chỉ có 10 dòng, trong đúng 1 tệp, chạy thành trang web

Tổng số thao tác phải làm. 3 – tạo 1 tệp, điền nội dung, nhập lệnh để chạy

Django

Django không làm web trong 1 file, nó dùng các câu lệnh có sẵn để sinh ra các file, tức là ta chỉ cần gõ lệnh chứ không phải gõ nhiều mã. Enter 3 command after is run always page

pip install django
0

Ngay lập tức đã có trang web mẫu của Django – ngay cả khi chưa gõ tí mã nào. To have results as Flask in on, must edit 2 file

File 

1 from flask import Flask
2 app = Flask("my website")
3
4 @app.route("/")
5 def hello_world():
6    return "Hello world"
7
8 @app.route("/hello/")
9 def hello(name):
10    return "Hello {}".format(name)
1, viết các chức năng tương tự bình

pip install django
2

Tệp 

1 from flask import Flask
2 app = Flask("my website")
3
4 @app.route("/")
5 def hello_world():
6    return "Hello world"
7
8 @app.route("/hello/")
9 def hello(name):
10    return "Hello {}".format(name)
2 thêm 3 dòng

pip install django
4

Time running 

1 from flask import Flask
2 app = Flask("my website")
3
4 @app.route("/")
5 def hello_world():
6    return "Hello world"
7
8 @app.route("/hello/")
9 def hello(name):
10    return "Hello {}".format(name)
3 sẽ có kết quả y như Flask

So sánh thao tác

Tổng số dòng mã phải thêm vào Django là 8 – cũng chính bằng số dòng Flask phải viết – không tính dòng trống. Django phải chạy nhiều hơn 2 lệnh – nhưng chỉ cần làm khi bắt đầu dự án. Flask viết code trong 1 file, còn Django phải sửa 2 file. ở đây có thể xem như hòa nhau không bên nào hơn/kém quá cả

So sánh khái niệm

Phần khác chủ đạo giữa Django và Flask là cách ghi URL. Người dùng Flask tạo một đối tượng Flask, đặt tên là ứng dụng, sau đó sử dụng 

1 from flask import Flask
2 app = Flask("my website")
3
4 @app.route("/")
5 def hello_world():
6    return "Hello world"
7
8 @app.route("/hello/")
9 def hello(name):
10    return "Hello {}".format(name)
4

pip install django
7

to mount path 

1 from flask import Flask
2 app = Flask("my website")
3
4 @app.route("/")
5 def hello_world():
6    return "Hello world"
7
8 @app.route("/hello/")
9 def hello(name):
10    return "Hello {}".format(name)
5 cho function ngay bên dưới nó (function hello). Trình trang trí không phải là một khái niệm đơn giản ở đây, mặc dù người dùng có thể nhắm mắt rồi nhập 
1 from flask import Flask
2 app = Flask("my website")
3
4 @app.route("/")
5 def hello_world():
6    return "Hello world"
7
8 @app.route("/hello/")
9 def hello(name):
10    return "Hello {}".format(name)
6 theo và hiểu nôm na là gắn đường dẫn cũng được

Django chọn giải pháp ghép đường dẫn với hàm thông qua tệp 

1 from flask import Flask
2 app = Flask("my website")
3
4 @app.route("/")
5 def hello_world():
6    return "Hello world"
7
8 @app.route("/hello/")
9 def hello(name):
10    return "Hello {}".format(name)
7, nhập mô-đun 
1 from flask import Flask
2 app = Flask("my website")
3
4 @app.route("/")
5 def hello_world():
6    return "Hello world"
7
8 @app.route("/hello/")
9 def hello(name):
10    return "Hello {}".format(name)
8 từ thư mục 
1 from flask import Flask
2 app = Flask("my website")
3
4 @app.route("/")
5 def hello_world():
6    return "Hello world"
7
8 @app.route("/hello/")
9 def hello(name):
10    return "Hello {}".format(name)
9 (tạo lúc chạy “startapp hello”), sau đó gán đường dẫn bằng cách gọi hàm _______90

pip install django
4

Dòng dài hơn Flask một chút là phải ghi 

$ export FLASK_APP=hello.py
$ flask run
 * Running on http://127.0.0.1:5000/
1, không có 
$ export FLASK_APP=hello.py
$ flask run
 * Running on http://127.0.0.1:5000/
2 ở đầu URL, và kiểu 
$ export FLASK_APP=hello.py
$ flask run
 * Running on http://127.0.0.1:5000/
3 thì ghi là 
$ export FLASK_APP=hello.py
$ flask run
 * Running on http://127.0.0.1:5000/
3 chứ không ghi 
$ export FLASK_APP=hello.py
$ flask run
 * Running on http://127.0.0.1:5000/
5 như Flask

Khi mới bắt đầu, khó có thể tìm ra lý do để Django viết riêng tệp 

1 from flask import Flask
2 app = Flask("my website")
3
4 @app.route("/")
5 def hello_world():
6    return "Hello world"
7
8 @app.route("/hello/")
9 def hello(name):
10    return "Hello {}".format(name)
7 để làm gì, khi mà bình @ lên đầu rất gọn gàng. Thì tới lúc có 20 URL bạn sẽ hiểu tại sao. Làm thế nào để liệt kê tất cả URL trong ứng dụng của mình? . Còn với Django all all are compact in
1 from flask import Flask
2 app = Flask("my website")
3
4 @app.route("/")
5 def hello_world():
6    return "Hello world"
7
8 @app.route("/hello/")
9 def hello(name):
10    return "Hello {}".format(name)
7

Không hiểu tại sao Flask lại chọn 

$ export FLASK_APP=hello.py
$ flask run
 * Running on http://127.0.0.1:5000/
5 để chỉ sử dụng kiểu chuỗi trong Python, vốn viết là 
$ export FLASK_APP=hello.py
$ flask run
 * Running on http://127.0.0.1:5000/
3, Django ghi lại thêm điểm ở đây

Có thể bạn đã biết rằng thiết yếu nhất không phải sử dụng 

1 from flask import Flask
2 app = Flask("my website")
3
4 @app.route("/")
5 def hello_world():
6    return "Hello world"
7
8 @app.route("/hello/")
9 def hello(name):
10    return "Hello {}".format(name)
6 trong Flask, bởi người trang trí này chỉ làm đơn giản có 1 việc. giống Django. Thay vì viết hai dòng 
pip install django
01 trên chức năng đầu, viết hai dòng này SAU khi định nghĩa các chức năng

pip install flask
6

This main doing thing that

pip install django
01 làm, như mô tả trong tài liệu của nó

Trình trang trí được sử dụng để đăng ký chức năng xem cho quy tắc URL nhất định. Điều này làm điều tương tự như. meth.

pip install django
03 nhưng được dùng để trang trí

Chốt. Django gõ nhiều hơn 2 lệnh, chỉnh sửa thêm 1 tệp, nhưng sử dụng ít khái niệm cao cấp hơn Flask. Dễ tính thì cho là hòa, còn Django không dành chiến thắng ở đây

number.

pip install django
04

Add page use template

Bình giữ nhiệt

Tạo 1 thư mục tên 

pip install django
05 ngay cạnh tệp 
pip install django
9, rồi tạo tệp 
pip install django
07 chứa mã HTML và mẫu Jinja2

pip install django
0

Code edit to

pip install django
1

Django

Tạo thư mục có tên 

pip install django
08 trong thư mục 
pip install django
09, sau đó tạo 
pip install django
07 và sao chép nội dung y mở phần mẫu của Flask

Thêm hàm sau vào 

1 from flask import Flask
2 app = Flask("my website")
3
4 @app.route("/")
5 def hello_world():
6    return "Hello world"
7
8 @app.route("/hello/")
9 def hello(name):
10    return "Hello {}".format(name)
1

pip install django
2

Và thêm 1 dòng vào 

1 from flask import Flask
2 app = Flask("my website")
3
4 @app.route("/")
5 def hello_world():
6    return "Hello world"
7
8 @app.route("/hello/")
9 def hello(name):
10    return "Hello {}".format(name)
2

pip install django
3

Ngoài ra phải thêm 

pip install django
23 vào tệp 
pip install django
24 Trong danh sách 
pip install django
25

pip install django
4

Phần này hòa lại, mẫu mặc định của Flask là 

pip install django
26 tương đương với mẫu Django, kể cả cú pháp cũng rất giống nhau. Django phải thêm 1 dòng vào tệp
pip install django
27 nhưng việc này cũng chỉ phải làm một lần duy nhất (lẽ ra nên làm luôn sau khi tạo ứng dụng từ đầu)

ứng dụng Django

Khi chạy lệnh 

pip install django
28 ban đầu, nó sinh ra các tệp cần thiết cho dự án Django (
1 from flask import Flask
2 app = Flask("my website")
3
4 @app.route("/")
5 def hello_world():
6    return "Hello world"
7
8 @app.route("/hello/")
9 def hello(name):
10    return "Hello {}".format(name)
7, 
pip install django
27, 
pip install django
41 …, và nó chỉ được chạy duy nhất 1 lần trong 1 dự án. Với Flask, bạn tạo thư mục bằng tay

Django đưa ra một khái niệm có nhiều ứng dụng trong dự án. Flask cũng có khái niệm tương tự, được gọi là Blueprint. Nó không cần thiết cho ví dụ 6-10 dòng, nhưng khi làm một trang web nhiều tính năng thì blueprint là cách tổ chức chính thức của Flask, ngay cả trong bài hướng dẫn của Flask cũng luôn sử dụng khái niệm này. Như vậy chỉ khác nhau việc học trước hay học sau, chứ không phải Flask thì không dùng tới

Flask không ép (không hướng dẫn) người dùng cách tổ chức mã, khi dự án tăng dần, có 3-5000 dòng mã, tắt phải sinh ra tệp mới, phải sắp xếp, tổ chức sao cho hợp lý – thế nào . Dự án Flask khi rơi vào tay lập trình viên chưa có nhiều kinh nghiệm làm web sẽ dẫn tới code mỗi nơi một chỗ, đi tìm cũng thấy mệt. Flask không hướng dẫn người dùng ngay từ đầu, nếu gặp phải người chưa có kinh nghiệm tổ chức, sẽ trở thành vô tổ chức

Django bắt đầu bằng cách đặt mỗi thứ vào một nơi quy định sẵn, ban đầu có vẻ hơi khó chịu, nhưng sự gọn gàng ngăn chặn hơi nước sẽ trả lại lợi ích rõ ràng về sau. Bạn có thể xem 10 dự án Django, cấu trúc đều như nhau, như mẫu của Django, thì 10 dự án Flask mỗi cái một kiểu

number. Bình 2 – Django 3

Thêm cơ sở dữ liệu, thêm tính năng đăng nhập, thêm trang quản trị

Đến đây, công việc của người dùng Django là mở tài liệu ra, đọc phần mô hình, đọc trang quản trị rồi làm theo hướng dẫn, đầy đủ hàng trăm tính năng có sẵn, thì người dùng Flask lại phải lo đi tìm

  • use any database?
  • has used ORM not?
  • used SQLAlchemy rồi has must used jar-sqlalchemy not (có)
  • khi đổi bảng lược đồ (thêm/bớt/sửa cột trong 1 bảng SQL) thì phải làm thế nào?
  • Viết trang quản trị (ví dụ trang web quản lý sinh viên thì đây là trang để thêm/bớt/sửa/xóa sinh viên) thì viết ra sao (có thể sử dụng bình-quản trị viên)
  • Đăng nhập thì làm thế nào?
  • Nhập/xác thực biểu mẫu thì dùng cái chi?
  • … tiếp tục …

number. Bình 2 – Django 4

Kết quả

Hòa

Action of them ta

pip install django
42 dùng ngay và luôn thôi

Kết luận

Bài này không nói Django hoàn hảo, dùng cho mọi trường hợp. Ví dụ nếu trang web của bạn không sử dụng cơ sở dữ liệu, không cần trang quản trị (như web của khoa học dữ liệu) thì Flask nhanh, nhẹ hơn Django nhiều phần. Hay khi bạn biết mình đang làm gì, biết đủ những thư viện để sử dụng ghép lại để thay thế cả những gì Django có sẵn, thì Flask là lựa chọn tuyệt vời. Flask không phải đồ chơi, phần cốt lõi của Uber đã từng được viết bằng Flask, Airflow – công cụ không thể thiếu trong các hệ thống cũng như dữ liệu chính là một sản phẩm sử dụng Flask. Vì thế nên học cả 2 nhé. Và nhớ là, Django không hề khó như bạn tưởng