Пример #1
0
class MainHandler(tornado.web.RequestHandler):
    form = SubmitForm(id=fields.Integer(required=True, _min=2),
                      text=fields.EnStr(data_key='search', required=False),
                      test=fields.Boolean(required=False, default=True),
                      status=fields.Integer(required=True,
                                            validate=OneOf((1, 2))),
                      stime=fields.StartDate(required=False,
                                             default=get_now_date),
                      etime=fields.EndedDate('stime', default=get_now_date),
                      user=fields.Nested(UserSchema, required=False),
                      ids=fields.IntList(min_len=0,
                                         max_len=3,
                                         required=False,
                                         when_field='test',
                                         when_value=fields.Boolean.real))

    async def validate(self):
        data, error = await self.form.bind(self)
        if error:
            return self.write(json.dumps({'state': 'FAIL', 'error': error}))
        return self.write(json.dumps({'state': 'SUCCESS', 'data': data}))

    async def post(self):
        return await self.validate()

    async def get(self):
        return await self.validate()
Пример #2
0
test command
curl http://localhost:8888?id=2\&name=aiohttp
curl http://localhost:8888 -X POST -d "id=2&name=aiohttp"
'''


class UserField(fields.Integer):
    cvt_type = None

    async def _validate(self, value, attr, data):
        val = random.randint(1, 10) / 100
        await asyncio.sleep(val)
        return {'uid': value, 'name': f'user_{value}'}


form = SubmitForm(id=fields.Integer(required=True, _min=1),
                  name=fields.Str(required=True, length=(3, 20)),
                  user=UserField(required=True))


async def handle(request):
    data, error = await form.bind(request)
    if error:
        return web.json_response(data=error, status=400)
    return web.json_response(data=data)


app = web.Application()
app.add_routes([web.get('/', handle), web.post('/', handle)])

if __name__ == '__main__':
Пример #3
0
class UserForm(Form):
    id = fields.Integer(required=True, _min=2)
    uname = fields.Username(required=True, length=(4, 20))
    stime = fields.StartDate(required=True)
    etime = fields.EndedDate('stime', required=True)
    roles = fields.IntList(required=True)
Пример #4
0
class UserSchema(schema.Schema):
    uid = fields.Integer(required=True)
    name = fields.Username(required=True, length=(4, 20))