zoukankan      html  css  js  c++  java
  • 封装request.get_params批量取值

    @json_request_validator(post_schema) 装饰器
    from functools import wraps
    from schema import SchemaError
    
    def json_request_validator(schema):
        """
        ***校验请求中携带的Json格式***
    
        1. 提取客户推送的数据,将其转化成json
        2. 按照schema对json进行校验和转换, 未通过就抛出相应的异常, 异常参见
        3. 添加get_params(*params)方法, 用于批量获取转换后的json参数
        4. 完成view的原有操作
        """
        def decorator(func):
            """
            装饰器
            """
    
            def inner_decorator(view, *args, **kwargs):
                """
                **装饰器内部逻辑实现**
                """
                try:
                    args_dict = json.loads(view.request.body.decode('utf-8'))
                    api_logger.info(args_dict)
                except Exception:
                    return JsonResponse(dict(
                        msg='请传递Json格式的数据',
                        code=ARGUMENT_INVALID,
                        data={}
                    ))
                try:
                    args_dict = schema.validate(args_dict)
                except SchemaError as ex:
                    return JsonResponse(dict(
                        msg=str(ex),
                        code=ARGUMENT_INVALID,
                        data={}
                    ))
    
                setattr(view.request, 'get_params',
                        lambda *arg_items: [args_dict.get(arg) for arg in arg_items])
    
                return func(view, *args, **kwargs)
    
            return wraps(func)(inner_decorator)
        return decorator
    from schema import Schema, Use, Optional
    
    class ProductView(APIView):
       
        post_schema = Schema({
            'barcode': Use(str, error='barcode required'),
            'store_code': Use(str, error='store code required'),
            'come_from': Use(str, error='from required'),
            Optional('quantity'): Use(int, error="params quantity require int"),
            Optional('user_id'): Use(int, error='params user id require int'),})
    
        @json_request_validator(post_schema)
        def post(self, request):
            barcode, store_code, come_from, quantity, user_id = request.get_params('barcode', 'store_code', 'come_from', 'quantity', 'user_id')
  • 相关阅读:
    过采样算法之SMOTE
    4.4 spring-自定义标签的解析
    4.3 spring-嵌入式beans标签的解析
    4.2 spring-import 标签的解析;
    4.1 spring-alias 标签的解析;
    4.0 spring-注册解析的Bean
    3.9 spring-自定义标签解析
    3.8 spring
    3.8 spring-qualifier 子元素的使用与解析
    3.7 spring-property 子元素的使用与解析
  • 原文地址:https://www.cnblogs.com/hanbowen/p/10080515.html
Copyright © 2011-2022 走看看