Hướng dẫn Django cho người mới bắt đầu (P3)
Tiếp nối với phần 2 trước đó, mình sẽ tiếp tục hướng dẫn các bạn tạo ứng dụng trên Django.
API:
Trước tiên sẽ tương tác với API thông qua python:
python manage.py shell
>>> from polls.models import Choice, Question # truyền vào các models chúng ta vừa viết.
>>> Question.objects.all() # Kiểm tra không có câu hỏi nào trong hệ thống.
<QuerySet []>
# Đến với quá trình tạo câu hỏi.
# Hỗ trở giờ sẽ bật trong tệp cài đặt mặc định. Ở Django sẽ sử dụng .timezone.now() thay cho datetime.datetime.now().
>>> from django.utils import timezone
>>> q = Question(question_text="alo?", pub_date=timezone.now())
# Lưu câu hỏi vào database với save().
>>> q.save()
# Sẽ có một id cho đối tượng bạn vừa tạo.
>>> q.id
1
#Truy cập vào giá trị các models thông qua các thuộc tính của python.
>>> q.question_text
"alo?"
>>> q.pub_date
datetime.datetime(2012, 2, 26, 13, 0, 0, 775217, tzinfo=<UTC>)
# Muốn thay đổi giá trị thông qua các thuộc tính thì gọi phải gọi save().
>>> q.question_text = "hey?"
>>> q.save()
#Hiển thị các câu hỏi trong database
>>> Question.objects.all()
<QuerySet [<Question: Question object (1)>]>
from django.db import models
class Question(models.Model):
# ...
def was_published_recently(self):
return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
class Choice(models.Model):
# ...
def __str__(self):
return self.choice_text
Tiếp theo ta lại quay về với python manage.py shell:
>>> from polls.models import Choice, Question
#Đảm bảo phần bổ sung __str__() đã hoạt động.
>>> Question.objects.all()
<QuerySet [<Question: alo?>]>
# Ở Django cung cấp một API dùng ta cứu trong database.
>>> Question.objects.filter(id=1)
<QuerySet [<Question: alo?>]>
>>> Question.objects.filter(question_text__startswith='alo')
<QuerySet [<Question: alo?>]>
#Nhận được thời gian câu hỏi được hiện ra.
>>> from django.utils import timezone
>>> current_year = timezone.now().year
>>> Question.objects.get(pub_date__year=current_year)
<Question: alo?>
# Yêu cầu id = 2 không hợp pháp.
>>> Question.objects.get(id=2)
Traceback (most recent call last):
...
DoesNotExist: Question matching query does not exist.
#Tra cứu khoá chính là việc phổ biến nên ở Django cung cấp phím tắt để tra cứu
#chính xác thông qua khoá chính
>>> Question.objects.get(pk=1)
<Question: alo?>
#Đảm bảo rằng việc chỉnh sửa xảy ra
>>> q = Question.objects.get(pk=1)
>>> q.was_published_recently()
True
# Cung cấp một vài Question và Choice.
# Thực hiện lệnh gọi Question và câu lệnh INSERT để thêm Choice vào tập hợp
>>> q = Question.objects.get(pk=1)
# Hiển thị các lựa chọn - hiện tại không có lựa chọn nào
>>> q.choice_set.all()
<QuerySet []>
# Tạo các lựa chọn.
>>> q.choice_set.create(choice_text='Not much', votes=0)
<Choice: Not much>
>>> q.choice_set.create(choice_text='The sky', votes=0)
<Choice: The sky>
>>> c = q.choice_set.create(choice_text='Just hacking again', votes=0)
# Đối tượng Choice có quyền truy cập vào các đối tượng Question liên quan với chúng.
>>> c.question
<Question: alo?>
#Các đối tượng Question cũng có thể truy cập vào các đối tượng Choice.
>>> q.choice_set.all()
<QuerySet [<Choice: Not much>, <Choice: The sky>, <Choice: Just hacking again>]>
>>> q.choice_set.count()
3
# Các API sẽ tự động theo dõi các rằng buộc, mối quan hệ.
# Sử dụng dấu gạch kép dưới để phân tách cách quan hệ.
>>> Choice.objects.filter(question__pub_date__year=current_year)
<QuerySet [<Choice: Not much>, <Choice: The sky>, <Choice: Just hacking again>]>
#Thực hiện xoá một trong các lựa chọn
>>> c = q.choice_set.filter(choice_text__startswith='Just hacking')
>>> c.delete()
Tạo người dùng:
Trước tiên, để tạo người dùng có quyền quản lý cần chạy lệnh sau:
python manage.py createsuperuser
Username: vietdev
Email address: [email protected]
Password:*********
Password (again):*********
Superuser created successfully.
Khởi động máy chủ:
Để khởi động máy chủ ta cần lệnh:
python manage.py runserver
Vào trang quản trị:
< Bây giờ, hãy thử đăng nhập bằng tài khoản superuser mà bạn đã tạo ở bước trước. Bạn sẽ thấy trang chỉ mục quản trị Django: một số loại nội dung có thể chỉnh sửa: nhóm và người dùng.
Để làm cho ứng dụng có thể sửa đổi được trong quản trị viên thì bạn hay chỉnh sửa polls/admin.py:
from django.contrib import admin
from .models import Question
admin.site.register(Question)
Nguồn: django tutorial