I. Giới thiệu Django

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

  • PBS
  • Instagram
  • Mozilla
  • The Washington Times
  • Disqus, Bitbucket
  • NextDoor

Ưu điểm của Django:

  • Hệ sinh thái lớn: nó đi kèm với một lượng lớn ứng dụng bên thứ 3 dễ dàng tích hợp với các yêu cầu dự án.
  • Tuổi đời: django đã được dùng hơn một thập kỷ. Suốt thời gian qua, rất nhiều tính năng được bổ sung và nâng cao để phát triển nó thành một framework mạnh mẽ. Ngoài ra, có rất nhiều tổ chức lớn đang sử dụng Django.
  • Admin: django hỗ trợ sẵn trang admin cho các thao tác CRUD với các model.
  • Plugins: cho phép lập trình viện thêm các tính năng mới vào ứng dụng.
  • Thư viện: vì có cộng đồng lớn nên nó có một lượng lớn thư viện cho mọi tác vụ.
  • ORM: nó giúp làm việc với dữ liệu theo cách hướng đối tượng.

II. Câu hỏi phỏng vấn về Django

1. Giải thích kiến trúc 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.

2. Giải thích cấu trúc thư mục Django?

  • 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.

3. Model trong Django là gì?

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:

  • Function-Based Views: ta import view như một hàm.
  • Class-based Views: tiếp cận theo hướng đối tượng.

6. Django ORM là gì?

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.

7. Static file là gì?

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.

8. Django Rest Framework là gì?

Django Rest Framework (DJF) là một framework mã nguồn mở dựa trên Django để tạo RESTful API.

9. Django-admin và manage.py là gì?

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ị.

10. Jinja là gì?

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.

11. Django URL là gì?

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.

18. Giải thích về vòng đời Response trong Django?

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.

  1. Đầu tiên file settings.py được tải chứa các lớp middleware khác nhau (MIDDLEWARES)
  2. Các middleware được thực thi theo thứ tự mà chúng được thiết lập trong MIDDLEWAREST.
  3. Từ đây, request được chuyển đến URL Router, thứ này chỉ cần lấy đường dẫn URL từ request và cố gắng ánh xạ với các đường dẫn URL tương ứng trong urls.py.
  4. Ngay sau khi nó được ánh xạ, nó sẽ gọi hàm view tương đương, từ đó một response tương đương được tạo ra.
  5. Response cũng đi qua middleware phản hồi và gửi lại cho trình duyệt.

19. Cơ sở dữ liệu được hỗ trợ bởi Django?

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.

20. Session framework là gì?

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ó.

21. Middleware trong Django là gì?

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.

22. Context trong Django là gì?

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.

23. Hàm django.shortcuts.render là gì?

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

26. Cách lọc mục trong model?

SESSION_ENGINE

33. Lấy một mục cụ thể trong Model?

get()

35. Cách tuỳ chỉnh chức năng của Django Admin Interface?

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.

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ụ

  • select_related
filter()

Nó tương tự câu truy vấn:

SELECT * FROM Model WHERE tag LIKE 'Human%' AND (category='Eye' OR category='Nose')

III. Tài liệu tham khảo

Tài liệu được tham khảo từ các nguồn sau: