Tôi đang sử dụng Django 1.9.3. Tôi có một dự án với một số ứng dụng. Tôi muốn cập nhật các bảng của một trong các ứng dụng khi khởi động dự án.Django - thực thi mã khi khởi động
Sử dụng hợp cụ thể:
Ví dụ, chúng ta hãy nói rằng tôi muốn bán các mặt hàng trên trang web của tôi. Tôi có một ứng dụng chứa Item model. Tôi có một dịch vụ web bên ngoài Django cung cấp dịch vụ "give_all_items_available()". Tôi muốn cung cấp cho người dùng của tôi danh sách các mục sử dụng trang web. Vì vậy, tôi nghĩ rằng tôi phải cập nhật cơ sở dữ liệu của tôi thường xuyên (lúc khởi động và mỗi lần trong một thời gian) với đầu vào dịch vụ web đó.
tôi có tất cả các mã được viết, nó trông giống như sau (đó là một ví dụ):
from my_app.models import My_table
def on_startup():
my_thread = Thread(execute = populate_tables, loopmode = True, background = True) # thread running in loopmode in background
my_thread.start() # starts the thread and returns
def populate_tables()
response = call_webservice() # let's imagine this method returns data for creating a new model instance
My_table(response).save() # this save() isn't threadsafe in this example, but that's not my point ;-)
Vấn đề của tôi là tôi không biết nơi nào để viết mã này
Nỗ lực:
Cho đến nay, với Django 1.6.5, tôi đi kèm với một số mã từ tệp init .py của ứng dụng của tôi. Nó đã được làm việc, nhưng tôi nghĩ rằng nó đã khá xấu xí (bắt đầu một sợi với một "nhập khẩu" trông thực sự giống như mã ẩn).
Tôi đã thấy ở Django 1.9 phương thức "ready()". Nhưng nó được viết trong tài liệu hướng dẫn để không đối phó với các mô hình trong phương pháp này vì vậy tôi bối rối.
Tôi có thể thêm mã khởi động trong lệnh bắt đầu từ máy chủ nhưng mã khởi động này được định hướng ứng dụng và theo ý kiến của tôi, các dự án không liên quan gì đến nó.
Bạn sẽ đề xuất điều gì?
Tôi sẵn lòng cung cấp thêm thông tin nếu cần.
Xin cảm ơn trước,
Bạn có thể tìm thấy điều gì đó hữu ích trong [câu hỏi ngăn xếp ngăn xếp này] (http://stackoverflow.com/questions/2781383/where-to-put-django-startup-code). – Robin
Tôi đã thấy nó, câu trả lời được chấp nhận của liên kết này đề cập đến phương thức "ready()" như tôi. Nhưng theo tài liệu Django, đó là một thực tế xấu để xen kẽ với các mô hình trong phương pháp này ... –
"Khởi động" có nghĩa là gì trong trường hợp này? Thông thường bạn bắt đầu một trang web một lần, và sau đó nó chạy liên tục. Tại sao bạn cần điền các bảng lúc "khởi động", thay vì ví dụ như trong quá trình di chuyển? –