2010-06-09 34 views
9

Tôi đang xây dựng một ứng dụng bằng cách sử dụng khung công tác Web2py ... Tôi không muốn phải sử dụng đối tượng yêu cầu để nhận tất cả tham số truy vấn, thay vào đó tôi muốn xây dựng bộ điều khiển của mình với các tham số có tên và giải nén bộ định tuyến từ điển chuỗi truy vấn (hoặc dữ liệu biểu mẫu) vào các tham số có tên và gọi bộ điều khiển của tôi.Bộ điều khiển Web2py có thông số?

nên thay vì một phương pháp điều khiển của

create_user(): 

nơi tôi sẽ sử dụng các đối tượng yêu cầu toàn cầu() và xem xét thông qua danh sách vars ... Tôi muốn thay vì để có

create_user(first_name, last_name, email): 

như tôi thấy trong các nền tảng MVC khác.

điều này có thể thực hiện được trong Web2py không? hoặc là có một plugin cho nó? hoặc tôi có cần thêm bản thân mình không?

Trả lời

11

số Như đã nêu trong book, một URL có dạng

http://127.0.0.1:8000/a/c/f.html/x/y/z?p=1&q=2 

bản đồ để ứng dụng (thư mục) a, bộ điều khiển (file) c.py, chức năng f, và các đối số bổ sung phải được giải nén từ đối tượng yêu cầu dưới dạng

x, y, z = tuple(request.args) 
p = request.vars['p'] # p=1 
q = request.vars['q'] # q=2 

Hơn nữa, web2py phát hiện cụ thể chức năng điều khiển hợp lệ như các chức năng không có đối số. AFAICR, điều này là đối diện với Django mà phát hiện các chức năng điều khiển hợp lệ như những người có ít nhất một đối số.

+0

cảm ơn ... Tôi đã tìm hiểu điều này qua thử nghiệm và lỗi. sẽ được tốt đẹp nếu có một số tùy chọn để thay đổi hành vi tùy thuộc vào cách bạn muốn nó hoạt động –

+0

Điều trên không đúng trong trường hợp các chức năng được trang trí @service. Một chức năng điều khiển với các tham số có thể hợp lệ khi được bao bọc trong trang trí này. Đây không phải là kịch bản OP chính xác nhưng có thể cung cấp giải pháp thay thế cho vấn đề của anh ta; xem câu trả lời của tôi dưới đây. –

+0

có sách là 'http: //127.0.0.1: 8000/a/c/f.html/x/y/z? P = 1 & q = 2', nhưng tôi nhận được thông số ** dist (request.vars) * * ¿Là thực hành tồi? –

2

tôi làm

def create_user(): 
    try: 
     first_name, last_name, email = request.args[:3] 
    except: 
     redirect('some_error_page') 

nhưng nhớ rằng first_name, last_name và email có thể chứa ký tự không được phép trong PATH_INFO (web2py trong kén chọn khi xác nhận rằng chỉ có [\ w \ -. \] Được phép) .

+0

hey thật tuyệt!Tôi là một newbie python ... vì vậy đã không nhận ra rằng khởi tạo kinda là có thể. Cảm ơn! –

1

Có một trường hợp trong đó bộ điều khiển web2py có thể sử dụng tham số. Khi một chức năng điều khiển có trang trí @service, thông số có thể được sử dụng, tùy thuộc vào loại dịch vụ, ví dụ:

@service.jsonrpc 
def somefunction(a=None, b='default'): 
    ## whatever 

Cách tiếp cận này là khi một chức năng điều khiển thực sự là một API, không phải là một cách để tạo ra một xem web. Có những điều tốt đẹp bạn có thể thực hiện trong việc xác định chức năng xem web và API theo cách song song và có chế độ xem web gọi hàm API, để đảm bảo bạn có sự tách biệt tốt các chế độ xem & bộ điều khiển.

Tùy thuộc vào cách bạn chọn phân chia trách nhiệm giữa ứng dụng web/javascript, chế độ xem web2py và bộ điều khiển web2py, có thể có chức năng điều khiển thực sự là API (với tham số tùy chọn) thay vì tạo tham số logic -unpacking trong bộ điều khiển kiểu xem web.

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