参数改名与传递

概述

有时因为前端传入的参数是python的关键字等原因,dealer的参数不能与前端传入的参数一致,此时就需要进行参数改名。

lessweb将「参数」这个概念做了如下区分:

方法

使用Context的set_alias(self, realname, queryname)方法,就能实现参数改名。

示例:

from lessweb import Application, Context, interceptor

def rename(ctx:Context):
    ctx.set_alias('try_', 'try')
    return ctx()

@interceptor(rename)
def controller(try_:int):
    return {'try': try_}

app = Application()
app.add_get_mapping('/alias', dealer=controller)
app.run()

请求:curl "http://localhost:8080/alias?try=5"
返回:{"try": 5}

dealer间参数传递

使用Context的set_param(self, realname, realvalue)方法可以重新设置参数的值。

.set_param(...)传递的值可以用.get_param(self, realname, default=None)获取,也可以直接依靠框架传递给dealer的参数,但是注意框架不会对这个值进行类型转换。

示例:

from lessweb import Application, Context, interceptor

def rename(ctx:Context):
    ret = []
    ctx.set_alias('try_', 'try')
    ret.append(ctx())
    ctx.set_param('try_', 'N')
    ret.append(ctx())
    return ret

@interceptor(rename)
def controller(ctx:Context, try_:int):
    return {'try': try_, '*': ctx.get_param('try_', 0)}

app = Application()
app.add_get_mapping('/alias', dealer=controller)
app.run()

请求:curl "http://localhost:8080/alias?try=5"
返回:[{"try": 5, "*": 0}, {"try": 5, "*": "N"}]