2011-01-27 25 views
9

Trong các ứng dụng thực tế, nếu tôi sử dụng một khuôn khổ biểu mẫu, tôi chắc chắn sẽ kết thúc chiến đấu tại một thời điểm nào đó.Mẫu thiết kế gọn gàng nhất để hiển thị dữ liệu biểu mẫu và lỗi xác thực?

Tôi quan tâm đến các mẫu thực tiễn tốt nhất để tạo biểu mẫu trong trang web. Tham chiếu đến việc triển khai bằng bất kỳ ngôn ngữ nào sẽ là tiền thưởng (tôi thường làm việc bằng Python). Tôi đặc biệt quan tâm đến vấn đề tạo/hiển thị biểu mẫu cho người dùng cuối.

Đây là cách tôi xem chủ đề. Hầu hết các phần của quy trình biểu mẫu có thể được xử lý với các thành phần tương đối nhẹ mà tôi có thể lấy ra khỏi các khung công tác như formencodeformish. Bởi "hầu hết các phần" tôi có nghĩa là giải mã dữ liệu biểu mẫu vào cấu trúc dữ liệu hợp lý (ví dụ: các trường lặp lại trong biểu mẫu sẽ trở thành danh sách bằng Python); marshalling giá trị vào các loại mà chúng tôi muốn (ví dụ: trường "tuổi" phải trở thành số nguyên); và xác thực các giá trị (ví dụ: "độ tuổi không được để trống").

Bit tôi kết thúc chiến đấu là tự tạo và hiển thị các biểu mẫu. Nhiều khung công tác (ví dụ: FormAlchemy) kết hợp chặt chẽ các lược đồ, xác thực và mô hình của chúng với một số loại lược đồ tạo tiện ích con biểu mẫu mà tôi không thích.

Nhiệm vụ có liên quan trong việc đưa ra một hình thức là:

  • Làm widget động (ví dụ như một danh sách lựa chọn với giá trị từ một cơ sở dữ liệu)
  • Looping qua fieldsets lặp đi lặp lại (ví dụ như một danh sách các tên, cặp tuổi đó từng đại diện cho một người)
  • Nhúng giá trị hiện có trong các trường mẫu (từ một cấu trúc dữ liệu)
  • Hiển thị lỗi xác nhận tiếp theo để tạo thành ruộng hoặc ở phía trên cùng của trang

Các tùy chọn tôi thấy để làm điều này là:

  • tạo, dựa trên widget được định nghĩa trong lược đồ (ví dụ Django)
  • sau quá trình hình thức, bằng cách áp dụng một cấu trúc dữ liệu chứa lỗi và giá trị cho một mẫu HTML (ví dụ htmlfill)
  • chấp nhận điều đó cho tất cả nhưng các trường hợp đơn giản nhất, bạn cũng có thể bắt đầu ngay từ đầu bởi mã hóa logic (vòng lặp, hiển thị lỗi, vv) theo cách thủ công trong mỗi mẫu biểu mẫu của bạn

Có cách nào khác để xử lý sự cố không? Những ưu và nhược điểm của mỗi cái là gì?

Các khung (Python) Tôi đã nhìn/đã chỉ ra cho đến nay là: flatland, formencode, FormAlchemy, formish, WTForms, Django hình thức, web2py, deform, FormConvertweb.py

Cập nhật : Tôi đã không thực sự có được rất nhiều với trả lời các câu hỏi về thực hành tốt nhất để xây dựng các hình thức, nhưng tôi đã đưa ra quyết định với dự án hiện tại của tôi để đi cho deform/colander, đó là một cách sane xử lý serialization vv, nhưng quan trọng hơn ly được ghi chép đầy đủ và được kiểm tra kỹ lưỡng. Tôi sẽ tránh tạo ra hình dạng cho tất cả mọi thứ, nhưng là những dạng đơn giản nhất.

+0

Cảm ơn bạn đã đặt câu hỏi này theo cách bạn đã làm. Yêu cầu của tôi gần giống với yêu cầu của bạn. Dựa trên bản cập nhật của bạn, bạn đã từ bỏ việc tạo biểu mẫu. Nhưng liên quan đến việc điền các biểu mẫu có giá trị, bạn có thể tìm được giải pháp tốt không? Bạn có sử dụng htmlfill cho mục đích này không? Cảm ơn – adowds

Trả lời

3

Bạn có thể thử django. Nó có mô-đun forms, cung cấp nhiều cơ chế hữu ích cho biểu mẫu web.

+0

Như đã đề cập, tôi đã biết Django - Tôi quan tâm đến các mẫu thiết kế (đặc biệt là phần điền đầy của vấn đề), chứ không phải là các khung công tác lớn. Ngoài ra, việc thực hiện các hình thức Django là rất chặt chẽ cùng với toàn bộ khuôn khổ. – seb

1

Ngoài ra còn có lớp học Hình thức của web.py mà bạn có thể thấy thú vị. Có các ví dụ trong số cookbook của nó.

+0

Tôi đã không xem xét web.py, cảm ơn - nhưng nó dường như là một khung công tác tạo biểu mẫu khác. Điều gì sẽ làm cho nó khác biệt/tốt hơn, ví dụ, formencode? – seb

1

Bạn có thể xem web2py, cung cấp một số cơ chế cho generating and processing forms (xem thêm liên quan đến mẫu Javascript and Ajax functionality). Các đối tượng biểu mẫu của nó (và các đối tượng trợ giúp HTML khác) là các biểu diễn phía máy chủ của HTML DOM và có thể được thao tác trước khi tuần tự hóa thành HTML (xem ref1, ref2, ref3, ref4). Nếu bạn có thêm câu hỏi về nó, hãy hỏi số mailing list.

1

Một bảng điều khiển gồm nhiều tác giả thư viện hình thức được trình bày tại PyCon 2010, mà có thể có liên quan đến câu hỏi của bạn:

http://www.pycon.tv/video/184/

+0

Cảm ơn, đó là một cuộc thảo luận hữu ích – seb

+0

Liên kết này dường như bị hỏng. –

+0

Cảm ơn bạn, @Matthew, liên kết cũ thực sự bị hỏng; Tôi tìm thấy video ở một nơi khác và đã cập nhật liên kết. Cảm ơn! –

0

bạn có thấy Bruno của django-floppyforms? Nó không trả lời câu hỏi của bạn nhưng nó đáng được nhận thức của nó được thực hiện.

1

Gần đây tôi đã sử dụng flatland để xử lý biểu mẫu phức tạp và thấy nó rất linh hoạt. Không có thư viện widget, nhưng nó có một bộ lọc/bộ lọc HTML mạnh mẽ, và như là pointed out trong tài liệu, nó khá đơn giản để viết các widget của riêng bạn. Đừng để phiên bản "0.0.2" đánh lừa bạn, thư viện khá trưởng thành và ổn định.

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