Cách tạo Django View
Cách tạo Django View
Giới thiệu
Trong bài viết trước, bạn đã cài đặt một ứng dụng Django cho phép người dùng với quyền admin đăng bài post và comment, thông qua Django Admin User Interface. Bạn cũng đã thiết lập việc lưu trữ dữ liệu với MySQL và ORM của Django là các models.
Trong bài viết này, ta sẽ tạo ra các Django view cho phép ứng dụng web xử lí chính xác các yêu cầu và phản hồi các kết quả thu được. Phản hòi web có thể là file HTML của trang Web, một lệnh điều hướng, hay một lỗi (chẳng hạn 404
). Mã nguồn cho các hàm View về mặt kỹ thuật có thể được đặt bất cứ nơi nào trong project, miễn là nó nằm trong path của Python. Tuy nhiên, có một số quy tắc phổ biến để đặt tên và lưu trữ các tập tin chứa chúng mà ta sẽ đề cập bên dưới.
Sau khi hoàn thành bài viết, trang blog Django của bạn sẽ chuyển các bài post hiện tại đến URL your-IP-or-domain/post
.
Yêu cầu
Trước hết, hãy hoàn thành các bài viết sau:
- Cài đặt Django cùng với môi trường phát triển của nó.
- Tạo ứng dụng Django và kết nối đến MySQL database.
- Tạo các mẫu Django
- Kết nối ứng dụng đến Django Admin UI.
Bước 1 — Tạo các hàm View
Di chuyển đến thư mục chứa ứng dụng và kích hoạt một trường phát triển.
cd ~/my_blog_app
. env/bin/activate
Giờ chuyển sang thư mục blogsite
để tạo một file Python mới cho hàm view đầu tiên.
cd ~/my_blog_app/blog/blogsite
Mở file với nano:
nano views.py
Đầu tiên, bạn sẽ thấy file có dạng như sau:
from django.shortcuts import render# Create your views here.
Giữ nguyên dòng lệnh import render()
từ thư viện django.shortcuts
. Hàm render()
cho phép ta kết hợp cả template và context để trả về chính xác đối tượng HttpResponse
. Chú ý điều này vì với tất cả hàm view, ta đều cần thực hiện việc khởi tạo, nạp và trả về HttpResponse
.
Tiếp theo ta sẽ import hàm HttpResponse()
từ thư viện http
của Django và dùng nó để hiển thị lời chào khi trang web được truy cập.
from django.shortcuts import renderfrom django.http import HttpResponsedefindex(request):return HttpResponse('Hello, welcome to the index page.')
Thêm một hàm nữa để hiển thị các bài post sẽ được tạo bên dưới.
...defindividual_post(request):return HttpResponse('Hi, this is where an individual post will be.')
Sau khi hoàn tất, file views.py
sẽ trông như sau:
from django.http import HttpResponsefrom django.shortcuts import renderdefindex(request):return HttpResponse('Hello, welcome to the index page.')defindividual_post(request):return HttpResponse('Hi, this is where an individual post will be.')
Sau đó lưu và đóng file.
Lúc này, không có URL được chỉ định nào được các hàm này trỏ đến, vì vậy ta cần thêm chúng đến khối urlpatterns bên trong file cấu hình URL. Với những hàm đã được thêm vào, ta sẽ gắn các URL cho chúng để hiển thị những trang ta vừa tạo.
Bước 2 — Gắn URL đến các View
Để hiển thị trang web, đầu tiên Django sẽ tìm module URLconf
để sử dụng, sau đó chuyến đến urlpatterns
(một cấu trúc dữ liệu dạng danh sách chứa tất cả các mẫu URL). Sau đó nó sẽ tìm đến mẫu URL khớp với truy vấn và hàm view đi cùng với nó. Hàm view sau đó sẽ nhận dữ liệu từ URL và HttpRequest
. Nếu có lỗi xảy ra, hàm hiển thị lỗi sẽ được gọi.
Trong thư mục ~/my_blog_app/blog/blogsite
,mở file urls.py
— chính là file cấu hình URL để edit:
nano urls.py
Thay đổi file sao cho nó giống như sau:
from django.urls import pathfrom . import views
urlpatterns = [
path('', views.index, name='index'),path('post/', views.individual_post, name='individual_post')
]
Sau khi update file cấu hình URL của thư mục blogsite
, ta sẽ thêm nó vào file cấu hình URL của thư mục blog
, nếu không nó sẽ bị bỏ qua vì Django chỉ nhìn vào file cấu hình của blog
để tìm kiếm các urlpatterns
.
Chuyển đến thư mục blog :
cd ~/my_blog_app/blog/blog
Mở file cấu hình:
nano urls.py
Thêm /blogsite/urls.py
vào danh sách các urlpatterns :
from django.contrib import adminfrom django.urls import include, path
urlpatterns = [
path('admin/', admin.site.urls),path('', include('blogsite.urls'))
]
Lưu và thoát.
Di chuyển đến thư mục gốc để kiểm tra file manage.py
thông qua URL.
cd ..
Chạy tiếp lệnh sau, với địa chỉ IP của server:
python manage.py runserver your-server-ip:8000
Chuyển hướng đến URL sau trên trình duyệt:
your-server-ip:8000
Bạn sẽ thấy trang web sau:
Tiếp theo, chuyển đến URL sau:
your-server-ip:8000/post/
Bước 3 — Tạo một bài Post
Giờ ta sẽ tạo một bài post với trang vừa tạo.
Truy cập vào địa chỉ:
your-server-ip:8000/admin/blogsite/
Bấm vào + Add
trong mục Posts
để tạo mới một bài post.
Bạn sẽ thấy trang tạo post như sau:
Dưới đây là hướng dẫn cụ thể cho các trường cần điền:
Trường | Nội dung |
---|---|
Title | Tiêu đề của bài post, chẳng hạn My First Blog Post . |
Slug | Là một đoạn văn bản nằm trong URL biểu thị cho bài post. Nó thường được đặt theo tiêu đề của bài post, nên ta sẽ điền vào là |
Content | Nội dung bài post. Để cho đơn giản, ta chỉ đặt nó là Hello, World! |
Author | Là username được dùng khi tạo bài post này. Ví dụ ở đây là Sammy . |
Sau khi điền bạn sẽ thu được:
Bấm nút SAVE
. Bạn sẽ thấy thông báo bài post đã được tạo thành công:
Bước 4 — Hiển thị dữ liệu trong Database
Trên terminal, bấm CTRL + C
để ngắt hoạt động server và mở trình thông dịch MySQL:
mysql -u root
Chuyển đến database blog_data
use blog_data;
Hiển thị toàn bộ các thành phần trong bảng blogsite_post
.
select * from blogsite_post;
Bạn sẽ thu được dữ liệu về các bài post được tạo thông qua admin user interface.
Output
+----+--------------------+--------------------+---------------+----------------------------+--------+
| id | title | slug | content | created_on | author |
+----+--------------------+--------------------+---------------+----------------------------+--------+
| 1 | My First Blog Post | my-first-blog-post | Hello, World! | 2018-04-24 17:10:00.139735 | Sammy |
+----+--------------------+--------------------+---------------+----------------------------+--------+
1 row in set (0.00 sec)
Giờ ta cần tham chiếu dữ liệu đến hàm view của bài post. Bấm CTRL + D
để thoát khỏi MySQL:
Chuyển đến thư mục blogsite
:
cd ~/my_blog_app/blog/blogsite
Mở file views.py:
nano views.py
Edit lại file
from django.shortcuts import renderfrom django.http import HttpResponsefrom .models import Postdefindex(request):return HttpResponse('Hello, welcome to the index page.')defindividual_post(request): recent_post = Post.objects.get(id__exact=1)
return HttpResponse(recent_post.title + ': ' + recent_post.content)
Trong đoạn mã ở trên, ta đã thêm một lệnh import bổ sung cho Post, loại bỏ các chuỗi trích dẫn từ HttpResponse và thay thế nó với dữ liệu từ bài post. Để tham chiéu các dữ liệu cho một đối tượng cụ thể, bạn hãy sử dụng ID của blog post liên kết với các đối tượng muốn hiển thị, và ta đang lưu trữ ID đó trong thuộc tính recent_post. Sau đó ta có thể nhận được các thuộc tính cụ thể của đối tượng đó bằng cách thêm vào các thuộc tính một bộ tách thời gian( period seperator).
Sau khi lưu và đóng file, chuyển đến thư mục chứa file manage.py
để khởi động Django.
cd ~/my_blog_app/blog
python manage.py runserver your-server-ip:8000/post/
Giờ hãy truy cập địa chỉ sau trên trình duyệt:
your-server-ip:8000/post/
Sau khi kiểm tra xong, bấm CTRL + C
trên terminal để ngừng các tiến trình trên server và ngừng môi trường phát triển với lệnh deactivate
Tổng kết
Trong hướng dẫn này, chúng tôi đã tạo view, ánh xạ mô hình URL, và hiển thị văn bản trên một trang web từ cơ sở dữ liệu của blog post.