处理请求

处理请求

lessweb.Application类的对象支持add_mapping方法,可以指定一类请求应该由哪个函数来处理。

class Application:
  def add_mapping(self, pattern: str, method: str, dealer: Callable):
    ...

参数解释:

Application对象还包含下列路由方法,相当于在方法名中指定method参数:

class Application:
  def add_connect_mapping(self, pattern, dealer): ...
  def add_delete_mapping(self, pattern, dealer): ...
  def add_get_mapping(self, pattern, dealer): ...
  def add_head_mapping(self, pattern, dealer): ...
  def add_options_mapping(self, pattern, dealer): ...
  def add_post_mapping(self, pattern, dealer): ...
  def add_put_mapping(self, pattern, dealer): ...

Dealer的输入和输出

输入

每个参数可以设置类型和默认值。如果前端传入的参数无法转成对应的类型或者没有设置默认值,框架就会内部抛出BadParamError错误。默认情况下,这会使前端收到400 Bad Request错误。

框架不支持带***参数的函数作为dealer。

输出

如果函数的返回值是bytes类型,则会原样输出;如果返回值是str类型,则会encode成bytes类型输出。默认编码格式是utf-8,也可在创建Application对象时设置encoding参数,例如app = Application(encoding='gbk')

如果返回值是None,则输出空串。

其他类型的返回值会转化为json字符串后输出。

homepath

homepath的含义参见上下文对象

Application.run()支持设置homepath,用法参照后面的例子。

例子

处理GET请求,并设置homepath。

from lessweb import Application

def f(x:int, y:int=100):
    return {'sum': x+y}

app = Application()
app.add_get_mapping('/ad*', dealer=f)
app.run(homepath='home')

请求1:
curl "http://localhost:8080/home/addd?x=3&y=4"
返回:
{"sum": 7}

请求2:
curl "http://localhost:8080/home/a?x=3"
返回:
{"sum": 103}

请求3:
curl "http://localhost:8080/home/add"
返回:
{"message": "Missing required param", "param": "x"}

请求4:
curl "http://localhost:8080/home/addd?x=1&y=x"
返回:
{"message": "invalid literal for int() with base 10: 'x'", "param": "y"}