Django là một framework web mã nguồn mở, miễn phí trên nền tảng Python tuân theo mô hình MVT (model-view-template). Hiện tại, nó được phát triển và duy trì bởi Django Software Foundation (DSF), một tổ chức độc lập ở Hoa kỳ.
Django được tạo vào năm 2003 bởi lập trình viên Adrian Holovaty và Simon Willson. Hai năm sau, nó được phát hành công cộng theo giấy phép BSD. Sau đó đến năm 2008, DSF đảm nhận việc phát triển Django.
Các tổ chức lớn sử dụng Django
Ưu điểm của Django:
Django tuân theo mô hình kiến trúc MVT (Model View Template) thay vì mô hình MVC (Model View Controller) truyền thống. Nó khác với MVC ở chỗ, logic vốn của controller được xử lý ở chính view của framework. Còn template nằm ở tầng biểu diễn. HTML được kết hợp với Django Template Language (DTL). Các nhà phát triển cung cấp model, view và template sau đó ánh xạ nó vào URL, để nó phục vụ người dùng.
manage.py
: dùng cho các dòng lệnh cần thiết tương tác với ứng dụng Django.__init__.py
: file rỗng nói với Python rằng xem thư mục hiện tại như một package Python.settings.py
: thiết lập các biến môi trường cho ứng dụng như tên cơ sở dữ liệu, secret key,...urls.py
: tất cả url của ứng dụng sẽ ở file này.wsgi.py
: điểm vào của ứng dụng, dược dùng bởi các web server khi dự án được tạo thành ứng dụng thực.Một model trong Django là một lớp sẽ được ánh xạ thành một bảng hoặc collection của cơ sở dữ liệu. Mỗi thuộc tính của lớp trong model sẽ là một trường trong cơ sở dữ liệu, nó được định nghĩa trong app/models.py
Ví dụ:
django.db.models.Model
Có hai loại view:
ORM (Object Relational Mapper) giúp ta tương tác với cơ sở dữ liệu theo code python thay vì viết các truy vấn sql thuần, nó giúp ta truy xuất, lưu và xoá dễ dàng hơn. Nó hoạt động ở tầng trừu tượng giữa model và cơ sở dữ liệu.
Website cần phục vụ các files như hình ảnh, js và css. Trong Django, các file này gọi là "static file". Nó được cung cấp bởi django.contrib.staticfiles
để quản lý các file đấy.
Django Rest Framework (DJF) là một framework mã nguồn mở dựa trên Django để tạo RESTful API.
Django-admin
là câu lệnh dùng cho các công việc quản trị trong Django. Bên cạnh đó, manage.py
là file tự động tạo khi ta tạo dự án django. Nó không chỉ thực hiện các công việc chung như django-admin mà còn thiết lập môi trường biến DJANGO_SETTINGS_MODULE
trỏ đến file settings.py trong dự án.
Các câu lệnh thường dùng trong django.
django-admin startproject
: tạo dự án Django với cấu trúc thư mục cho tên dự án nằm trong thư mục hiện tại hoặc đường dẫn.django-admin startapp
: tạo ứng dụng django trong dự án django với tên dự án.django-admin makemigrations
: tạo migration mới sau mỗi lần thay đổi model.django-admin migrate
: thực thi lệnh SQL, đồng bộ cơ sở dữ liệu với model và migrations.django-admin runserver
: chạy web server trên máy localhost. Cổng mặc định là 8000 với địa chỉ IP là 127.0.0.1. Có thể tuỳ chỉnh địa chỉ IP và port.django-admin createsuperuser
: tạo tài khoản với quyền quản trị.Jinja2 là một ngôn ngữ tạo template cung cấp cho các lập trình viên Python, được tạo ra dựa trên ý tưởng của Django template.
Jinja2 được sử dụng để tạo HTML, XML hoặc các định dạng file khác dựa trên nguyên tắc kết hợp các dữ liệu vào các vị trí đã được đánh dấu trong văn bản.
URL là một phần quan trọng trong ứng dụng web và Django cung cấp cách thiết kế để tuỳ chỉnh URL có tên là URLconf (URL Configuration). Chức năng cơ bản của nó là giúp bạn thiết kế URL ứng với các hàm view. Các URL này có thể là tĩnh hoặc động, được khai báo trong urls.py
Cú pháp:
_init_()
Các file static được lưu trong thư mục static trong ứng dụng. Như my_sample/static/my_sample/abcxy.jpg
.
Bất cứ khi nào một yêu cầu (request) đến web, Django sẽ tạo một đối tượng HttpRequest bao gồm metadata của request. Sau đó Django tải view cụ thể, truyền HttpRequest như tham số đầu tiên cho hàm view. Mỗi view sẽ trả về một đối tượng HttpResponse.
MIDDLEWARES
)MIDDLEWAREST
.Các cơ sở dữ liệu được Django hỗ trợ sẵn như PostgreSQL, MySQL, SQLite, Oracle bên cạnh đó là ODBC, Microsoft SQL Server, IBM DB2, SAP SQL. Hiện tại Django đã hỗ trợ NoSQL với mongoengine hay django-redis-cache.
Với session framework, ta có thể dễ dàng lưu trữ và truy xuất dữ liệu tuỳ ý dựa trên các lần truy cập trước. Nó lưu trữ dữ liệu phía server và xử lý các quá trình gửi nhận cookie. Do cookie chỉ bao gồm session ID, không có dữ liệu thực trừ khi bạn chỉ định nó.
Middleware là một thứ gì đó nằm giữa request và response. Nói đơn giản hơn nó là một cây cầu. Trong Django, một request được chuyển đến view thông qua middleware và dữ liệu được truyền tới response thông qua middleware.
Context là một tên biến mẫu ánh xạ được cấp cho các đối tượng Python trong Django. Đây là tên chung, nhưng bạn có thể đặt bất kỳ tên nào khác tùy thích nếu bạn muốn.
Khi một hàm view trả về một trang web như HttpResponse thay vì một chuỗi, ta sử dụng render()
. Hàm render là một hàm nhỏ giúp lập trình viên dễ dàng truyền dữ liệu vào template. Hàm này kết hợp template với dữ liệu thông qua template engine. Sau cùng, nó trả về một HttpResponse như một văn bản đã render, để trả về dữ liệu bởi model. Do đó, render() bỏ quả hầu hết công việc so với các template engine khác.
Cú pháp:
request
SESSION_ENGINE
get()
Có nhiều cách để tùy chỉnh chức năng của Django Admin Interface. Bạn có thể dựa trên form thêm/thay đổi do Django tạo tự động, bạn có thể thêm module JavaScript bằng cách sử dụng tham số js. Tham số này về cơ bản là danh sách các URL trỏ đến các module JavaScript sẽ được đưa vào dự án của bạn trong thẻ <script>
. Bạn cũng có thể viết lượt xem cho quản trị viên nếu bạn muốn.
select_related
và prefetch_related
?Cả hai hàm đều dùng cho lấy các trường liên quan từ model nhưng có vài khác biệt nhỏ. select_related
dùng cho mối quan hệ với foreign key tức là dùng join trên chính truy vấn trong khi prefetch_related
dùng cho các lookup riêng biệt và join phía python. Ví dụ
filter()
Nó tương tự câu truy vấn:
SELECT * FROM Model WHERE tag LIKE 'Human%' AND (category='Eye' OR category='Nose')
Tài liệu được tham khảo từ các nguồn sau: