• odoo web controller


    Routing

    openerp.http.route(route=None**kw)

    Decorator marking the decorated method as being a handler for requests. The method must be part of a subclass of Controller.

    装饰器可以将对应方法装饰为处理对应的http请求,该方法须是Controller的子类。

    Parameters
    • route -- string or array. The route part that will determine which http requests will match the decorated method. Can be a single string or an array of strings. See werkzeug's routing documentation for the format of route expression ( http://werkzeug.pocoo.org/docs/routing/ ). 
      字符串或数组,决定哪个http请求匹配所装饰的方法,可以是单个字符串、或多个字符串的数组
    • type -- The type of request, can be 'http' or 'json'.
      请求的类型,可以是http或json
    • auth --

      The type of authentication method, can on of the following:

      • user: The user must be authenticated and the current request will perform using the rights of the user.
          必须是认证的用户,该请求基于已认证的用户
      • public: The user may or may not be authenticated. If she isn't, the current request will perform using the shared Public user.
        当不通过认证访问时使用公用的认证
      • none: The method is always active, even if there is no database. Mainly used by the framework and authentication modules. There request code will not have any facilities to access the database nor have any configuration indicating the current database nor the current user.
        相应的方法总是可用,一般用于框架和认证模块,对应请求没有办法访问数据库或指向数据库的设置
    • methods -- A sequence of http methods this route applies to. If not specified, all methods are allowed.
      这个请求所应用的一系列http方法,如果没指定则是所有方法
    • cors -- The Access-Control-Allow-Origin cors directive value.
      跨域资源cors参数

    Request

    The request object is automatically set on openerp.http.request at the start of the request

    请求对象在收到请求时自动设置到openerp.http.request。

    class openerp.http.WebRequest(httprequest)

    Parent class for all Odoo Web request types, mostly deals with initialization and setup of the request object (the dispatching itself has to be handled by the subclasses)

    所有odoo WEB请求的父类,一般用于进行请求对象的初始化

    httprequest 
    params 请求参数的映射
    cr 
    context 
    env 
    session 
    debug 
    db 
    csrf_token(time_limit=3600) 为该请求生成并返回一个token(参数以秒计算,默认1小时,如果传None表示与当前用户session时间相同)
    Parameters:    httprequest (werkzeug.wrappers.BaseRequest) -- a wrapped werkzeug Request object
    httprequest

    the original werkzeug.wrappers.Request object provided to the request

    原始的werkzeug.wrappers.Request对象
    params

    Mapping of request parameters, not generally useful as they're provided directly to the handler method as keyword arguments

    请求参数的映射
    env

    The Environment bound to current request. Raises a RuntimeError if the current requests is not bound to a database.

    绑定到当前请求的环境
    context

    Mapping of context values for the current request

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

    OpenERPSession holding the HTTP session data for the current http session

    储存当前请求session数据的OpenERPSession
    cr

    Cursor initialized for the current method call.

    Accessing the cursor when the current request uses the none authentication will raise an exception.

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

    Indicates whether the current request is in "debug" mode

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

    opaque identifier for the OpenERPSession instance of the current request

    Deprecated since version 8.0:Use the sid attribute on session

    registry

    The registry to the database linked to this request. Can be None if the current request uses the none authentication.

    Deprecated since version 8.0:use env

    db

    The database linked to this request. Can be None if the current request uses the none authentication.

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

    HTTP session data

    Deprecated since version 8.0:Use session instead.

    class openerp.http.HttpRequest(*args)

    Handler for the http request type.

    matched routing parameters, query string parameters, form parameters and files are passed to the handler method as keyword arguments.

    In case of name conflict, routing parameters have priority.

    The handler method's result can be:

    • a falsy value, in which case the HTTP response will be an HTTP 204 (No Content)
    • a werkzeug Response object, which is returned as-is
    • str or unicode, will be wrapped in a Response object and interpreted as HTML
    make_response(dataheaders=Nonecookies=None)

    Helper for non-HTML responses, or HTML responses with custom response headers or cookies.

    While handlers can just return the HTML markup of a page they want to send as a string if non-HTML data is returned they need to create a complete response object, or the returned data will not be correctly interpreted by the clients.

    Parameters
    • data (basestring) -- response body
    • headers ([(name, value)]) -- HTTP headers to set on the response
    • cookies (collections.Mapping) -- cookies to set on the client
    not_found(description=None)

    Shortcut for a HTTP 404 (Not Found) response

    render(templateqcontext=Nonelazy=True**kw)

    Lazy render of a QWeb template.

    The actual rendering of the given template will occur at then end of the dispatching. Meanwhile, the template and/or qcontext can be altered or even replaced by a static response.

    Parameters
    • template (basestring) -- template to render
    • qcontext (dict) -- Rendering context to use
    • lazy (bool) -- whether the template rendering should be deferred until the last possible moment
    • kw -- forwarded to werkzeug's Response object
    class openerp.http.JsonRequest(*args)

    Request handler for JSON-RPC 2 over HTTP

    • method is ignored
    • params must be a JSON object (not an array) and is passed as keyword arguments to the handler method
    • the handler method's result is returned as JSON-RPC result and wrapped in the JSON-RPC Response

    Sucessful request:

    --> {"jsonrpc": "2.0",
         "method": "call",
         "params": {"context": {},
                    "arg1": "val1" },
         "id": null}
    
    <-- {"jsonrpc": "2.0",
         "result": { "res1": "val1" },
         "id": null}
    

    Request producing a error:

    --> {"jsonrpc": "2.0",
         "method": "call",
         "params": {"context": {},
                    "arg1": "val1" },
         "id": null}
    
    <-- {"jsonrpc": "2.0",
         "error": {"code": 1,
                   "message": "End user error message.",
                   "data": {"code": "codestring",
                            "debug": "traceback" } },
         "id": null}
    

    Response

    class openerp.http.Response(*args**kw)

    Response object passed through controller route chain.

    In addition to the werkzeug.wrappers.Response parameters, this class's constructor can take the following additional parameters for QWeb Lazy Rendering.

    Parameters
    • template (basestring) -- template to render
    • qcontext (dict) -- Rendering context to use
    • uid (int) -- User id to use for the ir.ui.view render call, None to use the request's user (the default)

    these attributes are available as parameters on the Response object and can be altered at any time before rendering

    Also exposes all the attributes and methods of werkzeug.wrappers.Response.

    render()

    Renders the Response's template, returns the result

    flatten()

    Forces the rendering of the response's template, sets the result as response body and unsets template

    Controllers

    Controllers need to provide extensibility, much like Model, but can't use the same mechanism as the pre-requisites (a database with loaded modules) may not be available yet (e.g. no database created, or no database selected).

    Controllers thus provide their own extension mechanism, separate from that of models:

    Controllers are created by inheriting from

    class openerp.http.Controller

    and defining methods decorated with route():

    class MyController(openerp.http.Controller):
        @route('/some_url', auth='public')
        def handler(self):
            return stuff()
    

    To override a controller, inherit from its class and override relevant methods, re-exposing them if necessary:

    class Extension(MyController):
        @route()
        def handler(self):
            do_before()
            return super(Extension, self).handler()
    
    • decorating with route() is necessary to keep the method (and route) visible: if the method is redefined without decorating, it will be "unpublished"
    • the decorators of all methods are combined, if the overriding method's decorator has no argument all previous ones will be kept, any provided argument will override previously defined ones e.g.:

      class Restrict(MyController):
          @route(auth='user')
          def handler(self):
              return super(Restrict, self).handler()
      

      will change /some_url from public authentication to user (requiring a log-in)

  • 相关阅读:
    wapp HTTP Error 404. The requested resource is not found.
    JS 动态修改json字符串
    使用VS2017新建的Web项目报错:Package Microsoft.Composition 1.0.27 is not compatible with netcoreapp1.1
    java park unpark
    DOUHAO
    Thread dump
    线程状态
    https://stackoverflow.com/questions/20795295/why-jstack-out-says-thread-state-is-runnable-while-socketread
    rocketmq-flink
    the-implementation-of-epoll
  • 原文地址:https://www.cnblogs.com/dancesir/p/7324936.html
Copyright © 2020-2023  润新知