Webargs,restfulパラメータ処理

10289 ワード

一般的なプログラマーの印象は服装がアウトだが、新技術やデジタル製品の追求は絶対にinだ.私が言った
前言:今回使うwebフレームワークはTornadoで、webargsの中国語の例はまだとても少なくて、私は頭を起こして、次に多くのパクリがあることを指定します
1パラメータ取得の基本操作
公式サイトには2つあります.1つは装飾器を使用することです.1つはparseインスタンスを宣言することです.二つの方法がある以上、どちらがもっと優雅なのかを考えなければなりません.restfulのスタイルの大前提では、同じルーティングパスには、「/api/books/」というインタフェースがPOST要求を使用すると、新しい本を追加する操作に対応し、GET要求はすべての本の集合を要求することを示すなど、さまざまな要求方式がある可能性があります.私にとって、装飾器はパラメータと関数の関連をより明らかに示すことができると思います.例えば、
@use_args({
        "q": fields.Str(),  #     
        "sort": fields.Str(missing='create_time')),
    }, location='query')
def get(self, args: dict) -> None:
	pass

@use_args({
        'titile': fields.Str(required=True),
        'writer': fields.Str(required=True),
        'remark': fields.Str(required=True)
    }, location='query')
def post(self, args: dict) -> None:
	pass

一方、宣言インスタンスを選択すると、大量のパラメータがスタックされやすいが、変数名で区別でき、初心者にとって読みやすさが高いため、それぞれが望ましい.
2あるパラメータに対する値の制限
たとえばソートは、タイトルtitle、パブリッシュ時間published_のみです.timeの2つの値はmarshmallowを使うことができます.validateのOneOfの方法.
@use_args({
        "q": fields.Str(),  #     
        "sort": fields.Str(missing='create_time', validate=OneOf([
            'title',
            'published_time',
        ])),
    }, location='query')
def get(self, args: dict) -> None:
	pass

3経路パラメータを受信しながらbodyパラメータを受信することができる
例えば本の情報を更新する方法
@route('/api/books/([0-9]+)')
class BookAPI(BaseHanlder):
    def patch(self, id: int) -> None:
    """
                
        Args:
            id:       id 
        Returns:Json  
    """
        id = int(id)
        args = json.loads(self.request.body)

        flage = True
        book = self.sess.query(Books).filter(Books.id == id)
        if not book:
            raise NotFoundError()
        try:
            book.update(args)
            self.sess.commit()
        except Exception as e:
            flage = False
            __import__('traceback').print_exc()
            self.sess.rollback()
        msg = f'    {id}  ' if flage else f'    {id}  '
        return self.write_json(data=None, msg=msg)

ファッションの定義は、新しいことを試してみることです.