--------------- <> -----------------
--- KHOA HỌC - CÔNG NGHỆ - GIÁO DỤC - VIỆC LÀM ---
--- Học để đi cùng bà con trên thế giới ---

Tìm kiếm trong Blog

Hiển thị các bài đăng có nhãn Django. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn Django. Hiển thị tất cả bài đăng

Django(3) - Mô hình MVT

Bài trước: Django(2) - Tạo ứng dụng đầu tiên

-----

1         Mô hình MVT



Đọc thêm: https://data-flair.training/blogs/django-mtv-architecture/

Mô hình MVT là biến thể của mô hình MVC. MVT là viết tắt của Model-View-Template. Về bản chất MVT và MVC đều giống nhau, đều chia ứng dụng ra thành ba thành phần: phần xử lý logic, phần hiển thị và phần thao tác với cơ sở dữ liệu.

Sự khác biệt của mô hình MVT và MVC được minh họa trong bảng sau:

Mô hình MVC

Mô hình MVT

Chức năng

Model

Model

Làm việc với cơ sở dữ liệu

View

Template

Hiển thị giao diện

Controller

View

Xử lý logic

1.1       Template

Template nghĩa là bản mẫu, là công cụ để tạo ra các giao diện web. Trong một bản mẫu sẽ có những phần cố định (static) và những phần được bổ sung sau (dynamic).

Django có hai công cụ để tạo các template là DTL và Jinja2.

Để tạo ra các template, bạn sẽ sử dụng cú pháp của một trong hai công cụ là DTL hoặc Jinja2, sau đó chuyển template cho template engine để chuyển sang mã HTML.

Như đã biết Template trong Django có vai trò như View trong mô hình MVC, phụ trách việc hiển thị nội dung.

Phân tích một tình huống cụ thể để hiểu về hoạt động của template. Hình sau là một bố cục phổ biến của trang web:


Ở bố cục trên, các vùng Top Navigation, Header, Footer thường là không đổi giữa các trang trong một website; vùng Side Navigation và Page Content chính là nội dung riêng biệt của mỗi trang. Vậy,

– Vùng tĩnh gồm: Top Navigation, Header, Footer (viết trong tập tin base.html)

– Vùng động gồm: Side Navigation và Page Content (viết trong các trang riêng biệt, ví dụ trang home.html)

Cú pháp của Jinja2 gồm bốn thành phần:

– Variables (biến)

– Tags (thẻ)

– Filters (bộ lọc)

– Comments (chú thích)

Biến

Biến được sử dụng để chèn dữ liệu động trong một template. Cú pháp sử dụng biến {{ tên_biến}}. Biến làm việc theo kiểu key:value, nghĩa là khi thực thi template, giá trị của biến (value) sẽ thay thế cho tên_biến (key).

Ví dụ:

Họ của tôi là {ho} và tên của tôi là {ten}. 

Với ho : Nguyễn, ten : Tèo. Kết quả chạy template sẽ có kết quả là

Họ của tôi là Nguyễn và tên của tôi là Tèo.

Thẻ

Thẻ được sử dụng để thể hiện một số xử lý logic trong quá trình kết xuất từ template ra trang kết quả (HTML).

Ví dụ: một thẻ có thể xuất ra nội dung (content), cấu trúc điều khiển.

Bạn có thể sử dụng thẻ để thực hiện lệnh if, for, lấy dữ liệu từ cơ sở dữ liệu.

Thẻ được bao bằng cặp dấu {%  %}.

Ví dụ:

<title>{% block title %}{% endblock %}</title>

Thẻ block nói cho template engine biết là các template con có thể ghi đè nội dung vào vùng này. Cụ thể title của trang con có thể ghi đè vào title của trang cha (base).

1.2       Áp dụng template vào dự án

Trong web app, tạo thư mục templates, trong thư mục templates tạo thư mục pages để chứa các template, trong pages tạo tập tin base.html.

[base.html]

<!doctype html>

<html>

<head>

    <title>{% block title %}{% endblock %}</title>

</head>

<body>

    Nội dung

    {% block content %}

    {% endblock %}

</body>

</html>

Tạo trang home.html dựa trên trang base.html.

[home.html]

{% extends "pages/base.html" %}

{% block title %}Home{% endblock %}

{% block content %}

    <p>Chào bác tèo.</p>

    <p>Đây là trang app home.</p>

{% endblock %}

Trang base.html chính là cái khung cơ bản của trang web, chứa các vùng không thay đổi giữa các trang.

Trang home.html là nội dung riêng biệt của trang home.

Template được thiết kế theo nguyên tắc không lặp lại (DRY: Don’t Repeat Yourself), nó sẽ viết những phần chung vào trang base.html, sau đó ghép các trang riêng biệt với trang base.html để tạo ra trang kết quả. Hay nói cách khác, các trang riêng biệt sẽ kế thừa từ trang base.html. Xem hình minh họa:



Đọc thêm về base template tại đây: https://jinja.palletsprojects.com/en/2.11.x/templates/

Xem thêm clip 4 (template và jinja) của HowKteam: https://www.youtube.com/watch?v=p1q39gPvDAI&list=PL33lvabfss1z8GYxjyMulCnhcYGk5ah8P&index=4

1.3       Bootstrap trong Django

Trong thư mục home (web app), tạo thư mục tên là static để chứa bootstrap.

Tải bootstrap từ trên mạng (ví dụ chọn phiên bản 4), giải nén và chép hai thư mục css và js vào static.

Tạo giao diện mẫu cho một blog trong tập tin base.html.

Trong base.html, sử dụng thẻ {% load static %} để lấy đường dẫn của thư mục static lưu vào nhãn static.

Ví dụ:

 {% load static %}

Sử dụng,

<link rel="stylesheet" href="{% static 'css/bootstrap.min.css' %}" type="text/css">

Đọc thêm về staticfiles: https://django.readthedocs.io/en/stable/howto/static-files/index.html

[base.html]

<!doctype html>

<html>

<head>

    {% load static %}

    <title>{% block title %}{% endblock %}</title>

    <link rel="stylesheet" href="{% static 'css/bootstrap.min.css' %}" type="text/css">

</head>

<body>

    <div class="container">

        <div class="row">

            <div class="col-sm-2">

                <img src="{% static 'images/goldfish.png' %}" class="responsive-img" style="max-height:50px">

            </div>

            <div class="col-sm-10">

                <h1>My blog</h1>

            </div>

        </div>

    </div>

    {% block content %}

    {% endblock %}

</body>

</html>

Đọc thêm về Bootstrap để tạo ra các trang theo yêu cầu.

1.4       Liên kết trang trong Template

Như đã biết, các định tuyến URL trong project/urls.py thực hiện ở mức web app, ví dụ path('home/', include('home.urls')) sau đó, các định tuyến URL chi tiết hơn sẽ được tạo trong web app/urls.py. Ví dụ: path('', views.index)

[home/urls.py]

from django.urls import path

from . import views

 

urlpatterns = [

    path('', views.index)

]

Ở đoạn mã trên, định tuyến trong web app/urls.py đã dẫn tới tập tin views, với hàm mặc định được gọi là index().

[views.py]

from django.shortcuts import render

from django.http import HttpResponse 

 

def index(request):

    return render(request, "pages/home.html")

Trong tập tin views.py, cho thấy nếu hàm index() được gọi thì sẽ hiển thị trang “pages/home.html”.

Nếu muốn thêm một định tuyến mới, thì cần chỉnh sửa ở hai tập tin là app/urls.py và views.py.

Ví dụ để thêm trang contact.html, cần thêm đoạn mã sau:

[home/urls.py]

from django.urls import path

from . import views

 

urlpatterns = [

    path('', views.index),

    path('contact/', views.contact)

]

[views.py]

from django.shortcuts import render

from django.http import HttpResponse 

 

def index(request):

    return render(request, "pages/home.html")

def contact(request):

    return render(request, "pages/contact.html")

Có thể điều chỉnh để khi người dùng nhập tên miền trang web thì vào thẳng trang home.html ở tập tin project/urls.py.

Ví dụ,

urlpatterns = [

    path('admin/', admin.site.urls),

    path('', include('home.urls')),

    path('listItems/', include('listItems.urls'))

]

Xem thêm clip 5 và 6 (sử dụng bootstrap) của HowKteam:

https://www.youtube.com/watch?v=_D5WGp2chtk&list=PL33lvabfss1z8GYxjyMulCnhcYGk5ah8P&index=5

https://www.youtube.com/watch?v=TzWwzM0SBRk&list=PL33lvabfss1z8GYxjyMulCnhcYGk5ah8P&index=6

-----

Cập nhật: 28/4/2021

Bài sau: Django (4) - Làm việc với cơ sở dữ liệu

-----

Bạn muốn tự học HTML bài bản? Xem thêm

Django(1)_Cài đặt django

 

1         Django

Django là framework được sử dụng để phát triển ứng dụng web dựa trên ngôn ngữ Python.

Đọc thêm thông tin ở đây: https://docs.djangoproject.com/en/3.1/intro/overview/

Tiêu chí của Django là giúp lập trình viên có thể làm ra ứng dụng web nhanh và dễ (fast and easy).

1.1       Cài đặt Django

Máy tính cần phải cài đặt Python trước khi cài đặt Django.

Như đã biết, cài đặt Python chính là cài đặt trình thông dịch (Interpreter), trong đó có bộ biên dịch lệnh (Compiler) chuyển từ mã nguồn sang dạng byte code, các thư viện, các tiện ích đi kèm và máy ảo Python (để thực thi mã chương trình ở dạng byte code và cho ra kết quả).

PIP là gì?

PIP là viết tắt của Package Installer for Python, là một trình (tiện ích) quản lý gói (module/package) của Python.

PIP là một công cụ, được sử dụng để cài đặt và quản lý các thư viện, các thành phần đi kèm (dependency) mà nó không có trong thư viện chuẩn của Python.

Vai trò của PIP giống với NPM trong Node, giống với Composer trong PHP.

PIP thường được cài đặt mặc định khi bạn cài đặt Python phiên bản 3.4 trở lên. Để xem phiên bản của Python đang được cài đặt trên máy, mở cửa sổ dòng lệnh, gõ lệnh python --version

Ví dụ:

C:\Users\Maxsys>python --version

Python 3.9.2

Vì Python đang sử dụng là phiên bản 3.9, nên PIP đã được cài đặt mặc định cùng với Python.

Để kiểm tra xem trên máy đã có PIP hay chưa, sử dụng lệnh pip --version.

Lệnh PIP được lưu tại vị trí sau:

C:\Users\Maxsys\AppData\Local\Programs\Python\Python39\Scripts

Vì vậy để chạy được lệnh PIP cần di chuyển dấu nhắc lệnh về đường dẫn trên, rồi mới sử dụng PIP --version.

Ví dụ:

C:\Users\Maxsys\AppData\Local\Programs\Python\Python39\Scripts>pip --version

pip 20.2.3 from c:\users\maxsys\appdata\local\programs\python\python39\lib\site-packages\pip (python 3.9)

Để chạy lệnh PIP ở mọi vị trí dấu nhắc lệnh, cần cài đặt biến môi trường cho PIP. Sau khi cài đặt biến môi trường, nhớ tắt cửa sổ dòng lệnh và bật lại cửa sổ dòng lệnh mới để kiểm tra lệnh PIP.

Xem thêm clip: https://www.youtube.com/watch?v=VF0oC9mkkno&list=PL33lvabfss1z8GYxjyMulCnhcYGk5ah8P

Django là gì?

Django là một web framework dựa trên Python, được sử dụng để phát triển ứng dụng web nhanh và tiện lợi.

Cài đặt Django bằng PIP

Đọc thêm: https://docs.djangoproject.com/en/3.1/topics/install/

Khi cài đặt Django, một bản “web server rút gọn” cũng được cài đặt kèm theo. Tuy nhiên, web server này chỉ được sử dụng thử nghiệm, để chạy kiểm tra. Nếu bạn muốn chạy ứng dụng web thực sự (production) thì cần cài đặt Apache và mod_wsgi.

Để cài đặt Django, tại dấu nhắc dòng lệnh, gõ lệnh pip install django

Ví dụ:

C:\Users\Maxsys>pip install django

Collecting django

  Downloading Django-3.1.7-py3-none-any.whl (7.8 MB)

     |████████████████████████████████| 7.8 MB 2.2 MB/s

Collecting sqlparse>=0.2.2

  Downloading sqlparse-0.4.1-py3-none-any.whl (42 kB)

     |████████████████████████████████| 42 kB 128 kB/s

Chờ cho quá trình tải và cài đặt thành công các gói.

Để kiểm tra việc cài đặt Django đã được chưa, sử dụng lệnh django-admin.

1.2       Django-admin

Để kiểm tra Django đã được cài đặt thành công hay chưa, mở cửa sổ dòng lệnh và gõ lệnh sau:

django-admin --version

Nếu Django đã được cài đặt thì lệnh trên sẽ hiển thị phiên bản của nó.

Ví dụ:

D:\myProject>django-admin --version

3.1.7

Django-admin là một công cụ dòng lệnh của django, dùng để làm việc, thao tác với framework django.

Nếu cài đặt Django thành công, django-admin sẽ được cài đặt vào thư mục “C:\Users\Maxsys\AppData\Local\Programs\Python\Python39\Scripts”

Trong Windows, muốn biết vị trí của một tập tin thực thi, mở cửa sổ dòng lệnh, gõ lệnh “where tenChuongTrinh”.

Ví dụ:

C:\>where django-admin

C:\Users\Maxsys\AppData\Local\Programs\Python\Python39\Scripts\django-admin.exe

Đọc thêm về django-admin: https://docs.djangoproject.com/en/3.1/ref/django-admin/

1.3       Tạo dự án đầu tiên

Để tạo dự án web dựa trên Django, sử dụng lệnh django-admin. Các bước thực hiện:

– Tạo một thư mục chứa dự án web, ví dụ: D:\hocdjango

– Trong cửa sổ dòng lệnh, di chuyển dấu nhắc lệnh vào thư mục sẽ tạo dự án web (ví dụ: cd d:\hocdjango)

D:\>cd hocdjango

D:\hocdjango>

– Gõ lệnh: django-admin startproject tenproject

Ví dụ:

D:\hocdjango>django-admin startproject teowebsite

Lưu ý: tenproject không được đặt là test và django. Django không cho đặt như vậy.

– Nếu tạo thành công vào thư mục hocdjango sẽ thấy có thư mục dự án teowebsite đã được tạo ra

1.4       Cấu trúc thư mục của một dự án Django

Cấu trúc thưc mục của một dự án django có dạng như sau:

teowebsite/

    manage.py

    teowebsite/

        __init__.py

        asgi.py

        settings.py

        urls.py

  wsgi.py

Trong đó:

– Thư mục gốc có tên teowebsite, thư mục này chứa toàn bộ dự án, bạn có thể đổi tên tùy ý (python không quan tâm tới tên thư mục này). Thư mục gốc teowebsite chứa tập tin manage.py và thư mục con teowebsite. Lưu ý có hai thư mục trùng tên là teowebsite, một cái là thư mục gốc và một cái là thư mục con. Thư mục gốc teowebsite được xem như web root của dự án, mỗi dự án có một web root riêng (đây là khác biệt so với lập trình web bằng PHP – web root là htdocs, hay ASP.NET – web root là www).

– Tập tin manage.py: cùng với django-admin, manage.py cũng là một công cụ dùng để thao tác, làm việc với dự án django. Manage.py được tạo ra tự động khi bạn tạo một dự án django. Mở tập tin manage.py để xem qua nội dung của nó, bạn không nên sửa nội dung của tập tin này. Bạn sẽ dùng tập tin manage.py để chạy web server. Đọc thêm: https://docs.djangoproject.com/en/2.2/ref/django-admin/

– Các thư mục và tập tin khác sẽ tìm hiểu tiếp ở các phần sau.

Bạn cũng có thể tạo dự án ngay trong thư mục hiện tại (hocdjango) mà không tạo thêm thư mục gốc teowebsite bằng cách sử dụng dấu chấm (.) ở cuối lệnh. Ví dụ:

– Xóa thư mục hocdjango\teowebsite vừa tạo

– Nhập vào lệnh sau để tạo dự án teowebsite:

D:\hocdjango>django-admin startproject teowebsite .

– Cấu trúc của dự án teowebsite sẽ có dạng sau:

hocdjango/

    teowebsite/

      asgi.py

__init__.py

      settings.py

      urls.py

      wsgi.py

manage.py

1.5       Sử dụng VS Code để lập trình với Django

Để sử dụng VS Code lập trình với Django, cần cài đặt thêm một số extension sau cho VS Code:

– Mở VS Code

– Bấm ctrl + shift + x để mở cửa sổ tìm kiếm và cài đặt các extension.

– Cài đặt tiện ích hỗ trợ lập trình python: gõ từ khóa python, bấm install để cài đặt. VS Code sẽ nhắc bạn trỏ VS Code tới Interpreter của python, để ý để thực hiện.

– Cài đặt tiện ích hỗ trợ lập trình django template : gõ từ khóa django template, bấm install để cài đặt

– Cài đặt tiện ích terminal để hỗ trợ chạy ở chế độ dòng lệnh: gõ từ khóa terminal, bấm install để cài đặt

– Để tắt cửa sổ tìm kiếm và cài đặt các extention, bấm ctrl + b, hoặc chuột phải vào chữ E của cửa sổ tìm kiếm > chọn Hide Side Bar.

1.6        Chạy web server

Như đã biết, thư mục gốc của dự án (ví dụ teowebsite đã tạo ở các phần trên) chính là web root, trong này sẽ có tiện ích (tập tin) manage.py, bạn sẽ dùng nó để chạy khởi chạy web server.

– Mở cửa sổ dòng lệnh, chuyển dấu nhắc chuột về thư mục gốc của dự án. Bạn cũng có thể chạy các lệnh trực tiếp trên VS Code, bằng cách vào View > Terminal, hoặc bấm Ctrl + `.

 D:\hocdjango\teowebsite>

– Dùng lệnh python, chạy tiện ích manage.py với tham số runserver để chạy web server

D:\hocdjango\teowebsite>python manage.py runserver

Watching for file changes with StatReloader

Performing system checks...

 

System check identified no issues (0 silenced).

 

You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.

Run 'python manage.py migrate' to apply them.

March 25, 2021 - 15:06:33

Django version 3.1.7, using settings 'teowebsite.settings'

Starting development server at http://127.0.0.1:8000/

Quit the server with CTRL-BREAK.

 

– Web server sẽ được khởi động và chạy ở cổng 8000

– Mở trình duyệt gõ http://localhost:8000 để xem kết quả, nếu có trang mặc định của Django là server đã chạy

– Để tắt server bấm Ctrl + C (máy chạy Windows 10)

– Có thể thiết lập cổng mới cho web server bằng lệnh

python manage.py runserver portnumber

Ví dụ cho web server chạy trên cổng 8080 bằng lệnh sau:

D:\hocdjango\teowebsite>python manage.py runserver 8080

– Mở trình duyệt, nhập địa chỉ http://localhost:8080 để kiểm tra.

Xem thêm clip 02, tạo dựa án Django (HowKteam): https://www.youtube.com/watch?v=r18_RvCOb9s&list=PL33lvabfss1z8GYxjyMulCnhcYGk5ah8P&index=2

------

Cập nhật: 1/4/2021

Đọc thêm: Django(2)_Tạo ứng dụng đầu tiên