Django(2) - Tạo ứng dụng đầu tiên

Bài trước: Django(1)_Cài đặt django 

-----

1         Tạo ứng dụng đầu tiên

1.1       Tạo web app

Trong Django, một project (dự án) sẽ chứa một hoặc nhiều app (ứng dụng). Ví dụ một project thương mại điện tử sẽ có các app authentication, payments, listitems.

Để tạo một app có tên là home, thực hiện các bước sau:

– Mở cửa sổ dòng lệnh, di chuyển con trỏ chuột vào dự án (ví dụ hocdjango\teowebsite\)

D:\hocdjango\teowebsite>python manage.py startapp home

– web app home sẽ được tạo ra trong thư mục  hocdjango\teowebsite\ với cấu trúc thư mục như sau:

teowebsite/ #thư mục webroot

    manage.py         

    teowebsite/ #thư mục dự án

          __init__.py

          asgi.py

          settings.py

          urls.py

    wsgi.py

home #thư mục app

      migrations

      __init__.py

      admin.py

      apps.py

      models.py

      tests.py

      views.py

– Chức năng của các tập tin và thư mục trong web app home sẽ được trình bày trong các phần sau khi làm việc với chúng.

– Mặc dù đã tạo ra web app có tên là home trong dự án, tuy nhiên django vẫn chưa biết việc này. Do vậy, cần phải cập nhật tường minh web app home vào tập tin settings.py để báo là bạn vừa mới thêm một web app vào dự án. Mở tập tin teowebsite/settings.py, tìm tới mục INSTALLED_APPS. Bạn sẽ thấy sáu app đã được tạo ra, bạn thêm app home vào cuối.

INSTALLED_APPS = [

    'django.contrib.admin',

    'django.contrib.auth',

    'django.contrib.contenttypes',

    'django.contrib.sessions',

    'django.contrib.messages',

    'django.contrib.staticfiles',

]

Kết quả là,

INSTALLED_APPS = [

    'django.contrib.admin',

    'django.contrib.auth',

    'django.contrib.contenttypes',

    'django.contrib.sessions',

    'django.contrib.messages',

    'django.contrib.staticfiles',

    'home' #moi them vao

 

]

– Cập nhật lại trạng thái của dự án bằng lệnh python manage.py migrate

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

Operations to perform:

  Apply all migrations: admin, auth, contenttypes, sessions

Running migrations:

  Applying contenttypes.0001_initial... OK

  Applying auth.0001_initial... OK

  Applying admin.0001_initial... OK

  Applying admin.0002_logentry_remove_auto_add... OK

  Applying admin.0003_logentry_add_action_flag_choices... OK

  Applying contenttypes.0002_remove_content_type_name... OK

  Applying auth.0002_alter_permission_name_max_length... OK

  Applying auth.0003_alter_user_email_max_length... OK

  Applying auth.0004_alter_user_username_opts... OK

  Applying auth.0005_alter_user_last_login_null... OK

  Applying auth.0006_require_contenttypes_0002... OK

  Applying auth.0007_alter_validators_add_error_messages... OK

  Applying auth.0008_alter_user_username_max_length... OK

  Applying auth.0009_alter_user_last_name_max_length... OK

  Applying auth.0010_alter_group_name_max_length... OK

  Applying auth.0011_update_proxy_permissions... OK

  Applying auth.0012_alter_user_first_name_max_length... OK

  Applying sessions.0001_initial... OK

1.2       Tạo một trang web

Trong django, để tạo ra một trang web, cần thao tác với tối thiểu là ba (thường là bốn) tập tin. Cụ thể là các tập tin urls.py, views.py, models.py và cuối cùng là một tập tin template HTML (ví dụ index.html). Trong một số trường hợp có thể không cần models.py nên chỉ cần ba tập tin là urls.py, views.py và template HTML.

Quá trình xử lý của django theo sơ đồ sau:

URL -> View -> Model (tùy chọn) -> Template





1.3       Chi tiết luồng xử lý

Quan sát một luồng xử lý đơn giản: trình duyệt > gửi URL tới > web server (Nginx, Apache, Localhost) > Máy chủ WSGI > tham chiếu tới tập tin settings.py > tham chiếu tới project/urls.py > tham chiếu tới web app/urls.py > tham chiếu và thực thi views > xuất kết quả ra trình duyệt.

1.3.1       WSGI

WSGI (viết tắt của Web Server Gateway Interface, giao diện cổng máy chủ web, hay máy chủ WSGI) là tiêu chuẩn (đặc tả) để kết nối các ứng dụng web python với web server (Nginx, Apache).

Mở tập tin teowebsite/wsgi để xem qua nội dung.

Đọc thêm: https://www.vithon.org/2011/08/lap-trinh-web-voi-python-7.html

Đọc thêm về wsgi tại đây: https://docs.djangoproject.com/en/3.1/howto/deployment/wsgi/

1.3.2       Settings.py

Settings.py là tập tin đầu mối, được sử dụng để quản lý các ứng dụng, các ứng dụng trung gian (middleware application), chứa các thông tin cấu hình cho một dự án Django.

Bạn cần cập nhật thông tin vào settings.py mỗi khi bạn thêm hoặc chỉnh sửa các ứng dụng (web  app).

[một phần settings.py]

...

# Application definition

 

INSTALLED_APPS = [

    'django.contrib.admin',

    'django.contrib.auth',

    'django.contrib.contenttypes',

    'django.contrib.sessions',

    'django.contrib.messages',

    'django.contrib.staticfiles',

    'home' #moi them vao

]

...

Ví dụ:

Tạo một web app (có tên là authentication), sau đó cập nhật vào tập tin settings.py.

Các bước thực hiện:

– Di chuyển con trỏ chuột vào thư mục dự án, dùng lệnh python manage.py startapp tenduan

D:\hocdjango\teowebsite>python manage.py startapp authentication

– Cập nhật tên dự án vào settings.py

[một phần settings.py]

INSTALLED_APPS = [

    'django.contrib.admin',

    'django.contrib.auth',

    'django.contrib.contenttypes',

    'django.contrib.sessions',

    'django.contrib.messages',

    'django.contrib.staticfiles',

    'home' #moi them vao

    'authentication'

]

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

1.3.3       Tập tin project/urls.py

Tập tin urls.py chứa thông tin về các URL mức dự án (project level). Lưu ý: còn tập tin urls.py mức web app.

URL là địa chỉ của image, webpage, webapp và các tài nguyên khác của website.

Mục đích chính của urls.py là kết nối các web app với project.

Tập tin này sẽ dựa vào URL của request gửi tới project (website), tìm web app phù hợp để kết nối.

Có thể coi urls.py như một cổng điều phối, định tuyến giữa URL và web app.

Ví dụ:

from django.contrib import admin

from django.urls import path

 

urlpatterns = [

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

]

Mỗi một định tuyến (hàm path()) gồm hai tham số, tham số đầu là đường dẫn URL-phần đường dẫn trong server, tham số thứ hai là tập tin URL của app tương ứng.

Ví dụ khi thêm một web app tên là home thì cấu hình như sau:

from django.contrib import admin

from django.urls import path, include

 

urlpatterns = [

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

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

]

Lệnh from…import dùng để gọi thư viện/đối tượng. Ví dụ, để gọi thư viện/đối tượng path của django, sẽ sử dụng lệnh from django.urls import path; có thể viết cách khác là import django.urls.path.

Cách gọi from…import tiện hơn vì khi sử dụng đối tượng path sẽ không phải ghi đầy đủ đường dẫn của path. Xem ví dụ:

from django.urls import path

urlpatterns = [

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

]

 

import django.urls.path

urlpatterns = [

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

]

1.3.4       Tập tin web app/urls.py

Tập tin web app/urls.py hoạt động giống với tập tin project/urls.py. Web app/urls.py giúp cho nội dung của project/urls.py gọn gàng hơn.

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)

]

1.3.5       Views

Django cũng hoạt động theo mô hình MVC. Tuy nhiên, trong Django vai trò của controller do chính framework đảm nhiệm, ngoài ra một phần chức năng của controller cũng được thể hiện trong view.

Để đơn giản có thể hiểu, trong Django, view sẽ đóng vai trò của controller, template đóng vai trò của view và vai trò của model thì không thay đổi.

Vì vậy trong Django, người ta hay nhắc tới một biến thể của MVC là mô hình MVT (model-view-template).

[home/views]

from django.shortcuts import render

from django.http import HttpResponse 

 

def index(request):

    response = HttpResponse()

    response.writelines("<h1>Chào cu tèo</h1>")

    return response

1.4       Chạy ứng dụng

– Khởi chạy local server

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

Watching for file changes with StatReloader

Performing system checks...

– Mở trình duyệt nhập đường dẫn

http://localhost:8000/home/

– Kết quả trên trình duyệt là dòng chữ “Chào cu tèo”.

Xem thêm clip 3-Tạo webapp, của Howkteam: https://www.youtube.com/watch?v=zIhLrQCFmic&list=PL33lvabfss1z8GYxjyMulCnhcYGk5ah8P&index=3

-----

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

Bài sau: Django(3) - Mô hình MVT