2008-09-04 33 views
11

Tôi là một người tin tưởng về ý tưởng dị giáo về việc kết nối chặt chẽ giữa phụ trợ và giao diện người dùng: Tôi muốn có kiến ​​thức hiện có về một phụ trợ được sử dụng tự động khi tạo giao diện người dùng. Ví dụ: nếu cột VARCHAR có tối đa 20 ký tự, thì GUI sẽ tự động hạn chế người dùng nhập hơn 20 ký tự trong trường biểu mẫu liên quan.Một khung ứng dụng web python cho khớp nối DB/GUI chặt chẽ?

Và tôi có sự phản đối mạnh mẽ đối với ORM muốn xác định bảng cơ sở dữ liệu của tôi hoặc dựa trên một số hack trong đó mỗi bảng cần có cột ID dạng số vì ORM.

Tôi đã xem xét một chút về khung cơ sở dữ liệu Python và tôi nghĩ rằng tôi có thể kết luận SQLAlchemy phù hợp nhất với tâm lý của tôi.

Bây giờ, tôi cần phải tìm một khung ứng dụng web phù hợp tự nhiên với SQLAlchemy (hoặc tương đương) và thậm chí với sự thèm ăn của tôi để ghép nối. Với "ứng dụng khuôn khổ web", ý tôi là các sản phẩm/dự án như Pyhons, Django, TurboGears, web2py vv

Ví dụ, nó lý tưởng nên có thể:

  • tự động chọn một widget hình thức thích hợp cho dữ liệu nhập vào một cột nhất định nếu được yêu cầu làm như vậy; ví dụ: nếu cột có khóa ngoài với cột có 10 giá trị khác nhau, tiện ích con sẽ hiển thị 10 giá trị có thể có dưới dạng một menu thả xuống
  • tự động tạo mã xác thực biểu mẫu javascript cung cấp phản hồi lỗi nhanh cho người dùng cuối chuỗi được tham gia vào một lĩnh vực mà sắp kết thúc trong một cột INTEGER, vv
  • tự động tạo một widget lịch cho dữ liệu đó sẽ kết thúc trong một cột NGÀY
  • gợi ý những hạn chế NOT NULL như javascript khiếu nại về dữ liệu trống hoặc khoảng trắng chỉ trong trường nhập có liên quan
  • tạo javascript mã xác nhận mà phù hợp có liên quan (đơn giản) CHECK-chế
  • làm cho nó dễ dàng để tránh SQL injection, bằng cách sử dụng báo cáo chuẩn bị và/hoặc xác nhận dữ liệu từ bên ngoài có nguồn gốc
  • làm cho nó dễ dàng để tránh cross site scripting bằng cách tự động thoát khỏi chuỗi đi khi thích hợp
  • làm việc sử dụng tên chế để tạo ra các thông báo lỗi phần nào thân thiện với người trong trường hợp một constrataint bị vi phạm

Tất cả điều này sẽ xảy ra động, do đó, điều chỉnh bảng được tự động phản ánh trên giao diện người dùng - có thể với cơ chế lưu vào bộ nhớ cache, để tất cả các mô hình nội tâm sẽ không giết hiệu suất. Nói cách khác, tôi không muốn lặp lại định nghĩa mô hình của mình trong một tệp XML (hoặc giống nhau) khi nó đã được xác định một cách cẩn thận trong cơ sở dữ liệu của tôi.

Có một khung như vậy tồn tại cho Python (hoặc cho bất kỳ ngôn ngữ nào, cho vấn đề đó) không? Nếu không: Một số khung ứng dụng web Python nào sẽ ít nhất trong cách nếu tôi tự thêm các phần của các tính năng trên?

Trả lời

3

Bạn nên xem django và đặc biệt là các mô-đun newformsadmin của chúng tôi.Mô-đun newforms cung cấp một khả năng tốt đẹp để xác thực phía máy chủ với việc tạo thông báo lỗi/trang lỗi tự động cho người dùng. Thêm xác thực ajax cũng là possible

+0

Django có chơi độc đáo với SQLAlchemy không? Cuối cùng tôi đã nghe nói, chi nhánh Django + SA rất khan hiếm, và câu hỏi ban đầu được chỉ định SA là ORM của sự lựa chọn. –

1

Tôi tin rằng các mô hình Django không hỗ trợ các khóa chính kết hợp (xem documentation). Nhưng có lẽ bạn có thể sử dụng SQLAlchemy trong Django? A google search cho biết bạn có thể. Tôi đã không sử dụng Django, vì vậy tôi không biết.

tôi đề nghị bạn hãy xem tại địa chỉ:

tôi không có bất kỳ kiến ​​thức sâu sắc về bất kỳ dự án nêu trên. Tôi chỉ đang trong quá trình cố gắng thêm một cái gì đó tương tự như một trong những ứng dụng của riêng tôi như những gì câu hỏi ban đầu đề cập đến. Danh sách trên chỉ đơn giản là một danh sách các dự án thú vị mà tôi đã tình cờ gặp phải.

Đối với các khung ứng dụng web cho Python, tôi khuyên bạn nên TurboGears 2. Không phải là tôi có chút kinh nghiệm nào với bất kỳ khuôn khổ khác, tôi giống như TurboGears ...

Nếu tác giả câu hỏi ban đầu của tìm thấy một giải pháp mà hoạt động tốt, vui lòng cập nhật hoặc trả lời chủ đề này.

1

TurboGears hiện sử dụng SQLObject theo mặc định nhưng bạn có thể sử dụng nó với SQLAlchemy. Họ đang nói rằng bản phát hành chính tiếp theo của TurboGears (1.1) sẽ sử dụng SQLAlchemy theo mặc định.

1

Tôi biết rằng bạn đặc trưng yêu cầu một khuôn khổ nhưng tôi nghĩ tôi sẽ cho bạn biết về những gì tôi nhận được ở đây. Tôi vừa trải qua việc chuyển đổi ứng dụng web của công ty từ một lớp ORM trong nhà thành sqlAlchemy vì vậy tôi xa một chuyên gia nhưng điều gì đó đã xảy ra với tôi là sqlAlchemy có các kiểu cho tất cả các thuộc tính mà nó ánh xạ từ cơ sở dữ liệu. sử dụng điều đó để giúp xuất html đúng vào trang. Vì vậy, chúng tôi sử dụng sqlAlchemy cho mặt sau và các mẫu Cheetah cho giao diện người dùng nhưng tất cả mọi thứ ở giữa là cơ bản của chúng tôi.

Chúng tôi chưa bao giờ quản lý để tìm một khung làm chính xác những gì chúng tôi muốn mà không thỏa hiệp và muốn có được tất cả các bit hoạt động phù hợp với chúng tôi và viết bản chất của chúng tôi.

Bước 1. Đối với mỗi loại dữ liệu sqlAlchemy.types.INTEGER vv Thêm một hàm bổ sung vàoHtml (hoặc nhiều có thểHTMLReadOnly, toHTMLAdminEdit) và chỉ trả về mẫu cho html, bây giờ bạn thậm chí không có để quan tâm đến kiểu dữ liệu hiển thị của bạn nếu bạn chỉ muốn nhổ ra toàn bộ một bảng mà bạn có thể làm (như một mẫu cheetah hoặc những gì mà công cụ tạo khuôn mẫu của bạn).

Bước 2

<table>

<tr>

#for $field in $dbObject.c:

<th>$field.name</th>

#end for

</tr>

<tr>

#for $field in dbObject.c:

<td>$field.type.toHtml($field.name, $field.value)</td>

#end for

</tr>

</table>

Sử dụng phương pháp cơ bản này và kéo dài sự quan tâm đến tiềm năng của nó, trong một buổi chiều, tôi đã tạo ra bản cập nhật đọc và xóa mã cho toàn bộ phần quản trị của chúng tôi trong cơ sở dữ liệu, chưa được đánh bóng django. nhu cầu của tôi.

Bước 3 Khám phá nhu cầu về bước thứ ba chỉ vào thứ Sáu, muốn tải lên tệp mà bạn biết cần nhiều hơn thì chỉ cần hộp văn bản mặc định kiểu dữ liệu VARCHAR. Không có mồ hôi, tôi chỉ overrode các lớp hàng trong định nghĩa bảng của tôi từ VARCHAR để FilePath (VARCHAR), nơi sự khác biệt duy nhất là FilePath đã có một phương pháp toHtml khác nhau. Làm việc hoàn hảo.

Tất cả những gì đã nói, nếu có một bao bì bị thu nhỏ, hãy thực hiện điều đó theo ý bạn.

Tuyên bố từ chối: Mã này được viết từ bộ nhớ sau nửa đêm và có thể sẽ không tạo ra trang web hoạt động.

5

web2py làm hầu hết những gì bạn hỏi:

Dựa trên một loại trường và xác nhận của nó sẽ làm cho lĩnh vực này với các phụ tùng thích hợp. Bạn có thể ghi đè bằng

db.table.field.widget=... 

và sử dụng tiện ích của bên thứ ba.

web2py có js để chặn người dùng nhập một số nguyên vào trường số nguyên hoặc không phải là số hai trong trường kép. trường thời gian, ngày tháng và ngày giờ có bộ chọn riêng. Các xác thực js này làm việc với (không phải thay vì) xác nhận hợp lệ phía máy chủ.

IS_EMPTY_OR(...) trình xác thực.

DAL ngăn chặn việc tiêm SQL kể từ khi mọi thứ được thoát khi đi vào DB.

web2py ngăn ngừa XSS bởi vì trong {{= biến}}, 'biến' được thoát trừ khi có quy định khác {{= XML (variable)}} hoặc {{= XML (biến, khử trùng = True)}}

Thông báo lỗi là đối số của trình xác thực, ví dụ:

db.table.field.requires=IS_NOT_EMPTY(error_message=T('hey! write something in here')) 

T là quốc tế.

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