处理请求

Summary

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

class Application(object):
  def add_mapping(self, pattern, method, dealer, view=None):
    ...

参数解释:

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

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

Dealer的输入和输出

输入

每个参数可以设置类型和默认值。默认的参数类型是Any类型。如果前端传入的参数无法转成对应的类型,则框架内部会抛出BadParamError异常;如果没有设置默认值且参数类型非Optional,则框架会内部抛出NeedParamError错误。默认情况下,这两种异常会使前端收到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"
返回:
lessweb.NeedParamError query:x doc:x

请求4:
curl "http://localhost:8080/home/addd?x=1&y=x"
返回:
lessweb.BadParamError query:y error:invalid literal for int() with base 10: 'x'