[Simple Django] - Tuỳ biến Command trong Django
Django
1
Python
40
White

Trương Tuấn Quang viết ngày 11/01/2018

Django

Note

  • Những bạn đã và đang và sẽ sử dụng Django hẳn chắc không còn lạ gì những câu lệnh command như python manage.py runserver, python manage.py createsuperuser .... Vậy runserver, createsuperuser là gì và làm sao để tạo có thể tạo một command tuỳ biến riêng mình.
  • Mặc định trong phần này, các bạn đều đã cài đặt được Django nên mình sẽ không hướng dẫn lại nhé. Lưu ý nhỏ nữa là. Nếu mọi người trong đây về lâu về dài gắn bó với open source thì mình nghĩ linux sẽ là nơi lý tưởng cho các bạn :).

1. Tạo project Django

# Câu lệnh khởi tạo một project Django
django-admin startproject custom_command

# Di chuyển vào trong project
cd custom_command

# Tạo một app 
django-admin startapp polls

2. Cấu trúc một Command

# Tạo package management và command trong polls có cấu trúc như sau
polls/
    __init__.py
    models.py
    management/
        __init__.py
        commands/
            __init__.py
            _private.py
            hello_world.py
    tests.py
    views.py

Sau khi đã tạo đúng cấu trúc để tạo một custom command. Giờ bạn sẽ khai báo app vào file /custom_command/settings.py để Django tự động nhận các app mới.

# Application definition

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    # My App
    'polls',
)

3. Tuỳ biến command

Phần thú vị nhất đến rồi. Bây giờ để thực hiện các cộng việc mà bạn muốn làm khi gọi một command tương tự như Django thực hiện. Bạn sẽ tạo một file trong thư mục command. Ở đây mình đã tạo sẵn một file có tên hello_world. Để gọi command hello_world, bạn sử dụng cậu lệnh python manage.py hello_world. Và đây là code trong file hello_world:

from django.core.management.base import BaseCommand

class Command(BaseCommand):
    def handle(self, *args, **options):
        self.stdout.write('[#] Begin execute...')
        try:
            self.stdout.write('[#] Hello World!')
        except Exception as e:
            print('Error:', e)
        self.stdout.write('[#] DONE!')

Chạy thử và xem thành qủa đầu tiên nào mọi người: python manage.py hello_world

[#] Begin execute...
[#] Hello World!
[#] DONE!

4. Truyền param trong command

Sẽ như thế nào nếu bạn muốn truyền param trong command. Thật không thể tin được là Django lại hỗ trợ chúng ta đến tận răng những việc này. Cùng mình xem đoạn code sau để hiểu thêm

class Command(BaseCommand):
    def add_arguments(self, parser):
        parser.add_argument('params1', nargs='?', type=str)

    def handle(self, *args, **options):
        # Using parameters:
        param1 = options['params1']
        self.stdout.write('[#] Begin execute...')
        try:
            if param1:
                self.stdout.write('[#] Hello ' + str(param1))
            else:
                self.stdout.write('[#] Hello World')
        except Exception as e:
            print('Error:', e)
        self.stdout.write('[#] DONE!')

Việc truyền param thật đơn giản phải không. python manage.py hello_world Quang . Bạn sẽ nhận được kết qủa

[#] Begin execute...
[#] Hello Quang
[#] DONE!

5. Tổng kết

Vậy là các bạn đã hiểu được cách tạo một custom command trong Django rồi đúng không. Hãy tự mình làm những example đơn giản như trên để hiểu rõ hơn. Bạn cũng có thể mở rộng ra như làm cách nào để truyển multiple param trong custom command. :)

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Trương Tuấn Quang

7 bài viết.
21 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
17 6
Mở đầu Hồi đầu tiên bắt đầu tìm hiểu Python, đó là việc sử dụng nó để scraping dữ liệu từ những trang web khác nhưng bị em Python tán tính mạnh qu...
Trương Tuấn Quang viết hơn 2 năm trước
17 6
White
13 3
(Ảnh) Agile là gì ?, Scrum là gì ?. Hẳn có rất nhiều bạn nghe đến khái niệm này. Liệu Agile và Scrum có phải là một ?. Bài viết này mình sẽ đi vào...
Trương Tuấn Quang viết hơn 1 năm trước
13 3
White
11 5
(Ảnh) Note: Bài viết giới thiệu và thảo luận về một số chức năng từ phiên bản python 3.4. Và chức năng native coroutines, async/await syntax thì...
Trương Tuấn Quang viết hơn 2 năm trước
11 5
Bài viết liên quan
White
1 0
Mở đầu Như đã nói ở bài trước, mình đang nghiên cứu về Spark nên cần log lại một số thứ để dành sau này dùng đến :smile: Đối tượng hướng đến vẫn ...
Phạm Quốc Thắng viết hơn 2 năm trước
1 0
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
7 bài viết.
21 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!