10

Web2pyフレームワークを使用してアプリを構築しています...すべてのクエリ文字列パラメーターを取得するためにリクエストオブジェクトを使用する必要はありません。代わりに、名前付きパラメーターを使用してコントローラーを構築し、ルーターにクエリ文字列を解凍させます。 (またはフォームデータ)名前付きパラメーターに辞書を挿入し、コントローラーを呼び出します。

したがって、コントローラーメソッドの代わりに

create_user():

ここで、グローバルrequest()オブジェクトを使用して、varsリストを調べます...代わりに

create_user(first_name, last_name, email):

他のMVCプラットフォームで見られるように。

これはWeb2pyですでに可能ですか?またはそれのためのプラグインはありますか?または、自分で追加する必要がありますか?

4

3 に答える 3

11

いいえ。に記載されているように、フォームのURL

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

アプリケーション(フォルダー)a、コントローラー(ファイル)c.py、関数fにマップし、追加の引数をリクエストオブジェクトから次のように解凍する必要があります。

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

さらに、web2pyは、有効なコントローラー関数を引数のない関数として明確に検出します。AFAICR、これは、有効なコントローラー機能を少なくとも1つの引数を持つものとして検出するDjangoとは反対です。

于 2010-06-09T07:19:55.317 に答える
2

そうです

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

ただし、first_name、last_name、およびemailには、path_infoで許可されていない文字が含まれている可能性があることに注意してください([\ w \-\。]のみが許可されていることを検証する場合のweb2pyは選択可能です)。

于 2010-06-09T15:44:02.243 に答える
1

web2pyコントローラーがパラメーターを使用できる状況があります。コントローラ関数に@serviceデコレータがある場合、サービスタイプに応じて、次のようにパラメータを使用できます。

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

このアプローチは、コントローラー関数が実際にはAPIであり、Webビューを生成する方法ではない場合に使用します。WebビューとAPIスタイルの関数を並行して定義し、WebビューにAPI関数を呼び出させて、ビューとコントローラーを適切に分離するという点で、できることはたくさんあります。

Webクライアント/JavaScript、web2pyビュー、およびweb2pyコントローラーの間で責任をどのように分割するかによっては、パラメーターのアンパックロジックを構築するのではなく、真にAPI(オプションのパラメーターを使用)であるコントローラー関数を使用する方が理にかなっています。 Webビュースタイルのコントローラー。

于 2013-06-17T13:59:29.990 に答える