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