res_company_white_url.py,主要作用是,在数据库中建立一个表,存放白名单的URL。当我们读取文件时,先判断Referer是否在白名单中,如果不在则自动转到一个图片文件,防止盗链。
接下来我们看一下主要代码:
class CompanyWhiteUrl(models.Model):
_name = 'res.company.whiteurl'
_description = 'Company White Url configuration'
_order = 'sequence'
_rec_name = 'white_url'
定义一个模型CompanyWhiteUrl,继承于models.Model,绝大多数Odoo模型中,模型都是基于models.Model模型的。 这种类型的模型具有永久的数据库持久性:为它们创建数据库表,并且它们的记录被存储,直到被显式删除。除models.Model 基本模型外还有另外两种分别是瞬态模型:models.TransientModel以及抽象模型:models.AbstractModel。
_name属性是模型中的必填属性,Odoo里类的唯一标识,并且在整个模型文件的全局不能够重复。
_description是描述属性,只在查看模型界面的时候作为展示之用。它可选不填,但好的编码习惯我们应该书写尽量详尽的描述。
_order :当浏览模型记录或者显示在列表视图时,设置默认排序字段。
_rec_name:用来指出引用关联字描述记录的字段,例如多对一关系。 默认情况下,它使用name字段,这是模型中常见的字段。但是这个属性允许我们使用任何其他字段来实现这个目的。
def _get_white_url_dicts(self):
whiteurls = self.sudo().search([('white_url', '!=', False)], order='sequence')
res = whiteurls.read([
'white_url'
])
return res
定义一个方法,self.sudo()获得超级权限,从而确保我们的操作能够进行。
search(domain).read(fields):返回记录集的指定字段值列表。返回字典列表。
sequence = fields.Integer(default=10)
company = fields.Many2one('res.company', string='Company', required=True, ondelete='cascade')
white_url = fields.Char(string='White Url', required=True, default='www.tderp.com')
url_name = fields.Char(string='Url Name', required=True, default='宜兴通达科技')
定义4个字段,
sequence(Integer) 模型保留字段, 可修改的排序,可以在列表视图里通过拖拽进行排序。
Company 多对一关系:Many2one关系需要两个参数:关联模块和展示字符。
它会在数据库表中创建一个拥有外键的字段去关联数据库表。
其他参数:
ondelete 在关联的记录被删除时,将会触发。默认值是null,也就是说,当关联的记录被删除时,它将被置空。其它值为restrict,当记录被关联时,禁止删除,cascade,删除关联记录的同时删除当前记录。
white_url和url_name定义两个Char类型字段,用来存储URL和URL name.
演示:
用户名:admin
密码:admin