私は直感的なルーティングでHTTPリクエストハンドラを書いています。私の目標は、装飾された関数を実行するために聞かれるべきパスと同様に、使用されているHTTPメソッドを記述する関数にデコレータを適用できることです。この実装のサンプルは次のとおりです。マスクされたPython文字列から部分文字列を抽出する方法は?
@route_handler("GET", "/personnel")
def retrievePersonnel():
return personnelDB.retrieveAll()
ただし、パスに変数を追加することもできます。たとえば、/personnel/3
はIDが3の人員をフェッチします。これを行う方法は、route_handlerに渡されたパスに「可変マスク」の並べ替えを指定する方法です。新しい例は、次のようになります
@route_handler("GET", "/personnel/{ID}")
def retrievePersonnelByID(ID):
return personnelDB.retrieveByID(ID)
デコレータの目的は、パス「マスク」(/personnel/{ID}
)リテラルパス(例えば/personnel/3
)を比較して、修飾関数に3を通過することであろう。私は解決策が2つの文字列を比較し、違いを保持し、リテラルの違いをマスクの差異(中括弧を引いたもの)の名前を付けた変数に入れることを前提としています。しかし、私はまた...リテラルはマスクマイナス{}
変数キャッチャーと一致するかどうかを確認する必要があると思います
TL; DR -
stringMask("/personnel/{ID}", "/personnel/5") -> True, {"ID": 5}
stringMask("/personnel/{ID}", "/flowers/5") -> False, {}
stringMask("/personnel/{ID}", "/personnel") -> False, {}
これは[Flask](http://flask.pocoo.org/)アプリの外観とほとんど同じですが、それを使用しないでください。 – jonrsharpe
['behave' BDDモジュール](http://pythonhosted.org/behave/)は、このアプローチを使用して関数の引数を検出し定義します。あなたは、ソースコードを見てみたいかもしれません。 –
@jonrsharpeこれは課題の要件からはるかに離れている宿題です。最低限、私はPythonのネイティブhttp.serverモジュールとライブラリを使用していなければなりません。私は装飾を行い、変数抽出を自分で行う方法を学びたいと思う。 –