2012-10-23 28 views
7

Tôi đang xây dựng một ứng dụng giả định sự tồn tại của các nhóm và quyền nhất định đối với quy trình làm việc của nó. Ví dụ: "thành viên" có thể đăng nhập vào ứng dụng và xem và chỉnh sửa dữ liệu cá nhân của họ, nhưng không thể xem ghi chú thường được hiển thị trên cùng một màn hình. Một "nhân viên" có thể xem các ghi chú đó và tạo hoặc chỉnh sửa ghi chú của riêng họ, nhưng chỉ "người quản lý thành viên" mới có thể xóa hoặc chỉnh sửa ghi chú của bất kỳ ai.nên Django nhóm và quyền được mã hóa cứng hoặc bootstrapped?

Vấn đề của tôi là khởi động dữ liệu cho ứng dụng này. Tôi có thể tạo dữ liệu lịch thi đấu JSON cho các nhóm, nhưng sau đó tôi phải mã hóa các PK, điều này có vẻ như thực hành không tốt (nếu ứng dụng của bên thứ ba mà tôi muốn sử dụng đã làm điều tương tự và có xung đột?) vấn đề là các điều khoản - tôi sẽ phải thêm PK vào các quyền mà lần lượt sẽ có PK cho các kiểu nội dung của chúng.

Tôi đã đọc về việc sử dụng móc post_syncdb để thêm dữ liệu ban đầu theo cách lập trình nhiều hơn mà tôi hy vọng sẽ giúp tôi giải quyết vấn đề PK được mã hóa cứng. Nhưng tôi tự hỏi liệu đây có phải là giải pháp tốt nhất cho vấn đề này hay không, hoặc nếu tôi "lạm dụng" các khái niệm về Quyền và Nhóm Django, ở đây, và nên làm một việc khác, như tạo mô hình mới hoặc chỉ đặt cờ (như " is_member_manager ") trên mẫu hồ sơ người dùng của tôi, v.v.

Trả lời

0

Thường tạo ứng dụng có tên init bằng lệnh quản lý initialize, tôi đặt tất cả mã đó để khởi động ứng dụng. Này cho phép bạn:

  • nếu bạn sử dụng một công cụ triển khai (tôi sử dụng [Ansible] (http://www.ansible.com/home, dơi có thể amy Vải công cụ, bash ...), bạn có thể tự động hoá quá trình và loại bỏ các ứng dụng init từ teh các ứng dụng được cài đặt sau khi trích lập dự phòng (lần đầu tiên cài đặt)

hoặc

  • kiểm tra nếu các lệnh đã được đưa ra để bỏ qua quá trình (Group.objects.all().exists()?)

(hoặc cả hai)

Tôi thấy giải pháp này rất dễ bảo trì và đủ mạnh cho mọi trường hợp.

post_syncdb (post_migrate trong Đáng 1.7) không phải là một giải pháp như được gọi là cho mỗi di cư

Nếu bạn chỉ cần để tải dữ liệu và/hoặc tạo hồ sơ (ví dụ nhóm/quản trị viên ...) các IMHO giải pháp tốt nhất đang sử dụng Di chuyển dữ liệu] (https://docs.djangoproject.com/en/1.7/topics/migrations/#data-migrations)