質問
web2pyフレームワークを使用してアプリを構築しています...要求オブジェクトを使用してすべてのクエリストリングパラメーターを取得する必要はありません。代わりに、名前付きパラメーターを使用してコントローラーを構築し、ルーターにクエリストリングを開梱したいと思います。 (またはフォームデータ)名前付きパラメーターへの辞書とコントローラーを呼び出します。
したがって、のコントローラー方法の代わりに
create_user():
グローバルリクエスト()オブジェクトを使用して、VARSリストを介して見る場所...代わりに持っていることを好むでしょう
create_user(first_name, last_name, email):
他のMVCプラットフォームで見られるように。
これはすでにWeb2pyで可能ですか?それとも、それのためのプラグインはありますか?それとも自分でそれを追加する必要がありますか?
解決
いいえ 本, 、フォームの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の反対です。
他のヒント
そうです
def create_user():
try:
first_name, last_name, email = request.args[:3]
except:
redirect('some_error_page')
しかし、first_name、last_name、および電子メールには、[ w - 。]のみが許可されていることを検証する場合、path_info(pickyのweb2py)で許可されていないcharが含まれている場合があります。
Web2pyコントローラーがパラメーターを使用できる状況があります。コントローラー関数に@Serviceデコレータがある場合、サービスタイプに応じて、パラメーターを使用できます。たとえば
@service.jsonrpc
def somefunction(a=None, b='default'):
## whatever
このアプローチは、コントローラー機能が実際にAPIであり、Webビューを生成する方法ではない場合です。 WebビューとAPIスタイルの関数を並行して定義するという点でできる素晴らしいことがあり、WebビューにAPI関数を呼び出すようにするために、ビューとコントローラーの適切な分離を確実にすることができます。
Webクライアント / JavaScript、Web2pyビュー、およびWeb2pyコントローラーに責任を分割する方法に応じて、パラメーターの不パッキングロジックを構築するのではなく、真にAPI(オプションのパラメーターを使用して)であるコントローラー機能を持つことは理にかなっています。 Web-Viewスタイルコントローラー。