美文网首页
106.ModelMapper模型映射器

106.ModelMapper模型映射器

作者: 羽天驿 | 来源:发表于2020-01-09 18:58 被阅读0次

    当我们需要把两个相似的对象相互转换,其目的是在对外提供数据时需要将一部分敏感数据(例如:密码、加密token等)隐藏起来。最普通的方法是,新建一个对象,将需要的值逐个set进去。如果有多组需要这样转换的对象,那么就需要做很多只是get/set这样无意义的工作。


    还可以把数据变成字典。


    在这样的背景下,ModelMapper诞生了,它是一个简单、高效、智能的对象映射工具。它的使用非常简单。


    下面是models使用ModeMapper的代码:

    from bpmappers import RawField, DelegateField
    from bpmappers.djangomodel import ModelMapper
    
    from polls.models import Subject, Twacher
    class SubjectMapper(ModelMapper):
        """学科映射器"""
        isHot = RawField('is_hot')
    
        class Meta:
            model = Subject
            exclude = ('is_hot', )
    
    
    class SubjectSimpleMapper(ModelMapper):
        """学科简单映射器"""
    
        class Meta:
            model = Subject
            fields = ('no', 'name')
    class TeacherMapper(ModelMapper):
        """老师映射器"""
        goodCount = RawField('good_count')
        badCount = RawField('bad_count')
    
        class Meta:
            model = Twacher
            exclude = ('good_count', 'bad_count', 'subject')
    

    exclude:把字段排除在外面。
    fields :包含那些字段在里面。
    filelds="_all_":查询所有得 。
    

     car = DelegateField(CarMapper)
        time = RawField('offend_time')
        place = RawField('offend_place')
        reason = RawField('offend_reason')
    

    RawField:把原始字段的名字改成新的名字。
    DelegateField:把某个字段的处理的权利交给另一个。
    上述的例子中:car本来是record这个类中的,而通过 DelegateField可以把处理的权利交给CarMapper。


     car = DelegateField(CarMapper)
    

       class Meta:
            model = Twacher
    

    上面的model=Twacher就可以把这个类变成字典。


    相关文章

      网友评论

          本文标题:106.ModelMapper模型映射器

          本文链接:https://www.haomeiwen.com/subject/piteactx.html