rest,restful验证器计时tp
aiovalidator的Python项目详细描述
包装aiophtt,用于验证和快速构建微服务。 赞成的意见: -易于集成,不影响整个项目的运行 -输入参数的声明性描述 -异步验证的能力 -http方法的可用性
示例
importasynciofromaiohttpimportwebfromaiovalidatorimport(validator_factory,middleware_exception,IntegerField)asyncdeffoo_validator(value):awaitasyncio.sleep(1)returnvaluedeffoo_default(value):asyncdefdefault():returnvaluereturndefaultclassHello(web.View):classField:field1=IntegerField()field2=IntegerField(required=False,methods={'GET'},verbose_name='Field method get')field3=IntegerField(validator=foo_validator,)field4=IntegerField(default=foo_default)@asyncio.coroutinedefget(self):fields=self.request['fields']print(fields)returnweb.json_response()app=web.Application(middlewares=[validator_factory(),middleware_exception])app.router.add_get('/{user_id}/',Hello)web.run_app(app,port=8000)
我的字段示例
importphonenumbersfromaiovalidatorimportStrField,abortclassPhoneField(StrField):defget_value(self,value):value=super().get_value(value)try:value=phonenumbers.parse(value,'RU')region=phonenumbers.region_code_for_number(value)regions=phonenumbers.COUNTRY_CODE_TO_REGION_CODE[7]ifnotphonenumbers.is_valid_number(value):raiseabort(status=400,text='Field {} not format phone'.format(self.name))ifregionnotinregions:raiseabort(status=400,text='Field {} not format phone'.format(self.name))value=phonenumbers.format_number(value,phonenumbers.PhoneNumberFormat.E164)[1:]returnvalueexceptphonenumbers.NumberParseException:raiseabort(status=400,text='Field {} not valid'.format(self.name))