2009-11-28 46 views
5

Tôi đang xây dựng một dự án khá lớn, về cơ bản bao gồm:Django, cách tạo bảng quản trị không có mô hình?

Máy chủ 1: Dịch vụ dựa trên băng. Glacier2 để xử lý phiên. Tường lửa cho phép truy cập Glacier2.

Máy chủ 2: Giao diện web (đọc, công khai) cho dịch vụ Băng qua Glacier2. Giao diện quản trị cho dịch vụ Băng qua sông băng 2.

Điểm tôi quan tâm là giao diện web. Tôi muốn sử dụng Django, bởi vì nó là cả hai được viết bằng python và có máy phát điện bảng điều khiển tự động vô cùng hữu ích.

Giao diện web không truy cập bất kỳ cơ sở dữ liệu nào. Nó kết nối với dịch vụ Ice trên Server # 1 thông qua bộ định tuyến Glacier2 và sử dụng API được tiếp xúc bởi các dịch vụ đó để thao tác dữ liệu.

Và như bạn có thể biết, thế hệ quản trị ở Django phụ thuộc vào việc sử dụng ORM của Django; mà tôi không sử dụng vì tôi không có cơ sở dữ liệu để truy cập. Vì vậy, tôi cần tạo bảng quản trị, nhưng thay vì có quyền truy cập dữ liệu chuẩn như ORM thông thường, tôi cần chặn bất kỳ lệnh gọi "truy cập db" nào và chuyển đổi chúng thành cuộc gọi dịch vụ Băng, và sau đó thực hiện đầu ra của dịch vụ (nếu có), biến đổi nó thành bất kỳ ORM nào thường trả về và trả về điều khiển cho Django.

Bất kỳ ai biết cách tôi có thể thực hiện việc này? những gì tôi sẽ cần để phân lớp? Bất kỳ ý tưởng cụ thể nào?

Cảm ơn thời gian của bạn.

Trả lời

7

Tôi nghĩ rằng có thể có một cách đơn giản hơn là viết ORMS tùy chỉnh để có được sự tích hợp quản trị mà bạn muốn. Tôi đã sử dụng nó trong một ứng dụng cho phép quản lý tài khoản email Webfaction thông qua API bảng điều khiển của họ.

Hãy xem models.py, admin.py và url.py ở đây: django-webfaction

Để tạo một mục trên trang index quản trị sử dụng một mô hình nộm mà đã quản lý = False

Đăng ký rằng mô hình với admin.

Sau đó, bạn có thể chặn các url quản trị và hướng chúng đến các chế độ xem của riêng bạn.

Điều này có ý nghĩa nếu hành động thêm/chỉnh sửa/xóa mà quản trị viên cung cấp có ý nghĩa cho ứng dụng của bạn. Nếu không, bạn nên ghi đè chỉ mục quản trị viên hoặc mẫu danh sách thay đổi để bao gồm các hành động tùy chỉnh của riêng bạn

+0

Tôi đã tải xuống ứng dụng của bạn và tôi thích việc triển khai chung. Đối với những gì dịch vụ thực sự làm, những thứ cốt lõi tôi đã thiết kế, nó đi xuống: Tài khoản (xác thực, người dùng, nhóm, quyền), Cài đặt (cho mọi dịch vụ và thậm chí giao diện web), Nhật ký (ghi lại hành động của mọi người dùng, không giống như bảng điều khiển quản trị 'Hành động gần đây'), Công việc (xếp hàng cho các dịch vụ khác) và các dịch vụ thực tế làm điều gì đó thú vị, chưa được thiết kế. Vì vậy, 9/10, bộ tác vụ thêm/chỉnh sửa/xóa sẽ giữ. Đối với 1/10, tôi luôn có thể tạo các trang tùy chỉnh của riêng mình như ứng dụng của bạn. – user168833

+0

+1 để đề xuất 'managed = False' – Don

0

Các django ORM có một backgable pluggable, có nghĩa là bạn có thể viết một phụ trợ cho những thứ mà không phải là RDBMSes. Nó có thể là một nhiệm vụ khá lớn, nhưng một nơi tốt để bắt đầu là với Malcolm Tredinnick của nói chuyện từ DjangoCon 2008, Inside the ORM.

Nếu không, bạn có thể bỏ qua toàn bộ ORM và viết biểu mẫu theo cách thủ công cho quyền truy cập bạn cần.

3

Sức mạnh thực sự của contrib.admin là django Forms. Về bản chất, công cụ quản trị cơ bản là tự động tạo một Biểu mẫu để phù hợp với một Mô hình với một chút urls.py định tuyến được ném vào. Cuối cùng, có lẽ sẽ dễ dàng hơn khi sử dụng các biểu mẫu django ngoài công cụ quản trị.

+0

+1. Anh ta nên lấy mã ví dụ từ URL bạn cung cấp, làm việc đó, sau đó thích ứng nó với mục đích của mình. – steveha

+0

Tôi sẽ kiểm tra tài liệu bạn đã liên kết. – user168833

1

bạn có thể "chế nhạo" một số lớp để nó trông giống như một mô hình nhưng proxy này hoạt động với API của bạn

f.e.

class QuerysetMock(object): 
    def all(): 
     return call_to_your_api() 
    [...] 


class MetaMock(object): 
    def fields(): 
     return fields_mock_objects.. 
    verbose_name = '' 
    [...] 

class ModelMock(object): 
    _meta = MetaMock() 
    objects = QuerysetMock() 

admin.site.register(ModelMock) 

này có thể làm việc .. nhưng bạn cần phải làm nhiều django.model thứ tương thích

Các vấn đề liên quan