<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      django flask 解析數據使用的json解析器

      import json
      from collections.abc import Iterable
      
      
      class ParseError(BaseException):
          def __init__(self, message):
              self.message = message
      
      class AttrDict(dict):
          def __setattr__(self, key, value):
              self.__setitem__(key, value)
      
          def __getattr__(self, item):
              try:
                  return self.__getitem__(item)
              except KeyError:
                  raise AttributeError(item)
      
          def __delattr__(self, item):
              self.__delitem__(item)
      
      
      # 需要校驗的參數對象
      class Argument(object):
          """
          Argument object.
      
          :param name: name of option
          :param default: default value if the argument if absent
          :param bool required: is required
          """
      
          def __init__(
              self,
              name,
              default=None,
              handler=None,
              required=True,
              type=str,
              filter=None,
              help=None,
              validators=None,
          ):
              self.name = name
              self.default = default
              self.type = type
              self.required = required
              self.filter = filter
              self.help = help
              self.handler = handler
              self.validators = validators
              if not isinstance(self.name, str):
                  raise TypeError("Argument name must be string")
              if filter and not callable(self.filter):
                  raise TypeError("Argument filter is not callable")
      
          def parse(self, has_key, value):  # noqa
              if not has_key:
                  if self.required and self.default is None:
                      raise ParseError(
                          self.help or "Required Error: %s is required" % self.name
                      )
                  else:
                      return self.default
              elif value in ["", None]:
                  if self.default is not None:
                      return self.default
                  elif self.required:
                      raise ParseError(
                          self.help or "Value Error: %s must not be null" % self.name
                      )
                  elif self.help:
                      raise ParseError(self.help)
                  else:
                      return value
              try:
                  if self.type:
                      if self.type in (list, dict) and isinstance(value, str):
                          value = json.loads(value)
                          assert isinstance(value, self.type)
                      elif self.type == bool and isinstance(value, str):
                          assert value.lower() in ["true", "false"]
                          value = value.lower() == "true"
                      elif not isinstance(value, self.type):
                          value = self.type(value)
              except (TypeError, ValueError, AssertionError):
                  raise ParseError(
                      self.help or "Type Error: %s type must be %s" % (self.name, self.type)
                  )
      
              if self.filter:
                  if not self.filter(value):
                      raise ParseError(
                          self.help or "Value Error: %s filter check failed" % self.name
                      )
      
              if isinstance(self.validators, Iterable):
                  for validator in self.validators:
                      validator(value)
      
              if self.handler:
                  value = self.handler(value)
              return value
      
      
      # 解析器基類
      class BaseParser(object):
          def __init__(self, *args):
              self.args = []
              for e in args:
                  if isinstance(e, str):
                      e = Argument(e)
                  elif not isinstance(e, Argument):
                      raise TypeError("%r is not instance of Argument" % e)
                  self.args.append(e)
      
          def _get(self, key):
              raise NotImplementedError
      
          def _init(self, data):
              raise NotImplementedError
      
          def add_argument(self, **kwargs):
              self.args.append(Argument(**kwargs))
      
          def parse(self, data=None, clear=False):
              rst = AttrDict()
              try:
                  self._init(data)
                  for e in self.args:
                      has_key, value = self._get(e.name)
                      if clear and has_key is False and e.required is False:
                          continue
                      rst[e.name] = e.parse(has_key, value)
              except ParseError as err:
                  return None, err.message
              return rst, None
      
      
      # Json解析器
      class JsonParser(BaseParser):
          def __init__(self, *args):
              self.__data = None
              super(JsonParser, self).__init__(*args)
      
          def _get(self, key):
              return key in self.__data, self.__data.get(key)
      
          def _init(self, data):
              try:
                  if isinstance(data, (str, bytes)):
                      self.__data = json.loads(data) if data else {}
                  else:
                      assert hasattr(data, "__contains__")
                      assert hasattr(data, "get")
                      assert callable(data.get)
                      self.__data = data
              except (ValueError, AssertionError):
                  raise ParseError("Invalid data type for parse")

       使用方法:

      post 方法:

              form, error = JsonParser(
                  Argument(
                      "username",
                      required=True,
                      type=str,
                  ),
                  Argument(
                      "password",
                      required=True,
                      type=str,
                  ),
                  Argument(
                      "permission",
                      required=False,
                      type=str,
                  ),
                  Argument(
                      "email",
                      required=False,
                      type=str,
                  ),
                  Argument(
                      "phone",
                      required=False,
                      type=str,
                  )
              ).parse(request.body)
              
              if error:
                  return FailResponse(code=CODE.LOGINERROR.code, message=error)

      get 使用方法

              form, error = JsonParser(
                  Argument(
                      "username",
                      required=True,
                      type=str,
                  ),
                  Argument(
                      "permission_name",
                      required=True,
                      type=str,
                  ),
                  Argument(
                      "permission_value",
                      required=True,
                      type=bool,
                  ),
              ).parse(request.GET)
              
              if error:
                  return FailResponse(code=CODE.LOGINERROR.code, error=error)

       

      posted @ 2024-07-19 18:23  小天狼鑫  閱讀(38)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 久久精品波多野结衣| 18禁成人免费无码网站| 成人午夜福利精品一区二区| 国产乱人伦AV在线麻豆A| 亚洲香蕉伊综合在人在线| 无码内射中文字幕岛国片| 国产精品一区二区在线欢| 性欧美三级在线观看| 18禁免费无码无遮挡网站| 澎湖县| 日本一卡2卡3卡4卡无卡免费| 亚洲综合伊人久久综合| 色一伦一情一区二区三区| 亚洲中文字幕国产综合| 亚洲一区成人在线视频| 欧美做受视频播放| 日韩av无码精品人妻系列| 99riav精品免费视频观看| 国产性天天综合网| 国产天美传媒性色av高清| 国产一区在线观看不卡| 国产精品中文字幕免费| 乱码午夜-极品国产内射| 亚洲精品国偷拍自产在线观看蜜臀 | 97久久精品人人澡人人爽| 新余市| 日韩少妇人妻vs中文字幕| 激情综合网激情综合| 日韩深夜免费在线观看| 又黄又爽又色的少妇毛片| 国产乱码1卡二卡3卡四卡5| 蜜桃av亚洲精品一区二区| 五月婷婷深开心五月天| 日韩激情无码av一区二区| 中文字幕有码高清日韩| 亚洲精品天堂在线观看| 国产精品国产三级国产试看| 不卡一区二区国产精品| 最新国产AV最新国产在钱| 伊人色综合久久天天| 国产成人无码A区在线观看视频|