Cách tạo Django View

1 năm trước

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  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:

 

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:

/my_blog_app/blog/blogsite/views.py
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.

~/my_blog_app/blog/blogsite/views.py
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.

~/my_blog_app/blog/blogsite/views.py
...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:

~/my_blog_app/blog/blogsite/views.py
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:

~/my_blog_app/blog/blogsite/urls.py
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 :

~/my_blog_app/blog/blog/urls.py
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:

Django Initial Index Page

Tiếp theo, chuyển đến URL sau:

your-server-ip:8000/post/

Django Initial Post Page

 

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.

Django Blogsite Admin Page

Bạn sẽ thấy trang tạo post như sau:

Django Add Post Form

Dưới đây là hướng dẫn cụ thể cho các trường cần điền:

TrườngNội dung
TitleTiê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à my-first-blog-post.

ContentNội dung bài post. Để cho đơn giản, ta chỉ đặt nó là Hello, World!
AuthorLà 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:

Django Filled Out Blog Post Form

Bấm nút SAVE. Bạn sẽ thấy thông báo bài post đã được tạo thành công:

Django Post Submission Successful

 

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

~/my_blog_app/blog/blogsite
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/

Django Served Blog 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.