odoo controller

发布时间 2023-10-25 11:09:50作者: CrossPython

odoo 模型:
一:Controller
一般通过继承的形式来创建controller类,继承自odoo.http.Controller。

以route装饰器来装饰定义的方法,提供url路由访问路径:

class MyController(odoo.http.Controller)://继承controller定义控制器
@route('/some_url', auth='public')//装饰器路由访问方法,并指明访问方式:公开还是需要用户登陆
def handler(self):
return stuff()
路由映射相关
odoo.http.route(route=None, **kw) 装饰器可以将对应方法装饰为处理对应的http请求。

装饰器参数有:

1)route
字符串或数组,决定哪些http请求可以匹配所装饰的方法,可以是单个字符串、或多个字符串的数组。

2)type
请求的类型,可以是http或json。

3)auth
认证方法的类型,可以是以下几种:

user - 必须是已通过登录认证的用户,才能访问该请求。如果未经过登录直接访问,则会拦截并跳转回odoo登录页面。

public - 使用公用的认证,可以不经过登录验证直接访问。

none - 相应的方法总是可用,一般用于框架和认证模块,对应请求没有办法访问数据库或指向数据库的设置。

4)methods
这个请求所应用的一系列http方法【PATCH, POST, PUT, 或者DELETE】,如果没指定则是所有方法。

methods=['POST', 'GET']
5)cors
跨域资源cors参数。

6)csrf(boolean)
是否开启CSRF跨域保护,默认True。

a)如果表单是用python代码生成的,可通过request.csrf_token() 获取csrf

b)如果表单是用javascript生成的,CSRF token会自动被添加到QWEB环境变量中,通过require('web.core').csrf_token获取

c)如果终端可从其他地方以api或webhook形式调用,需要将对应的csrf禁用,此时最好用其他方式进行验证

请求相关
请求对象在收到请求时自动设置到odoo.http.request,可以通过该对象提前request中携带的 参数、cookie、session对象等。

跟请求相关的类和函数有以下几种:
1:class odoo.http.WebRequest(httprequest)
所有odoo WEB请求的父类,一般用于进行请求对象的初始化,其构建函数的参数有:
1)httprequest

原始的werkzeug.wrappers.Request对象

2)params

请求参数的映射

3)cr

当前方法调用的初始游标,当使用none的认证方式时读取游标会报错

4)context

当前请求的上下文键值映射

5)env

绑定到当前请求的环境

6)session

储存当前请求session数据的OpenERPSession

7)debug

指定当前请求是否是debug模式

8)db

当前请求所关联的数据库,当使用none认证时为None

9)csrf_token(time_limit=3600)

为该请求生成并返回一个token(参数以秒计算,默认1小时,如果传None表示与当前用户session时间相同)


2:class odoo.http.HttpRequest(*args)
用于处理http类型请求的函数,匹配 路由参数、查询参数、表格参数,如果有指定文件也会传给该方法。为防止重名,路由参数优先级最高。
该函数的返回值有三种:

无效值,HTTP响应会返回一个204(没有内容)
一个werkzeug 响应对象
一个字符串或unicode,会被响应对象包装并使用HTML解析
3:make_response(data, headers=None, cookies=None)
用于生成没有HTML的响应 或 自定义响应头、cookie的html响应。
由于处理函数只以字符串形式返回html标记内容,需要组成一个完整的响应对象,这样客户端才能解析

参数有:

1)data (basestring)

响应主体。

2)headers ([(name, value)])

http响应头。

3)cookies (collections.Mapping)

发送给客户端的cookie。

4:not_found(description=None)
给出404 NOT FOUND响应。

5:render(template, qcontext=None, lazy=True, **kw)
渲染qweb模板,在调度完成后会对给定的模板进行渲染并返回给客户端。

参数有:

1)template (basestr