Serializer的功能

这篇博客详细介绍了如何在Django中创建一个用户信息序列化器,包括字段的设置、验证方法以及如何处理创建和更新用户数据。内容涵盖序列化器的使用,如`serializers.Serializer`,以及自定义方法如`get_xxx`用于显示多对多字段。同时,还展示了如何进行单字段和多字段验证,确保数据的完整性和安全性。

创建user/serializers.py写序列化器

class UserInfoSerializer(serializers.Serializer):
 id = serializers.CharField(read_only=True) 
 # 普通字段,设置id为只读字段,不能修改
  username = serializers.CharField(min_length=3,max_length=20
  ,error_messages= {'required': '该字段必填'})
   # 显示普通字段
    img = serializers.ImageField(required=False) 
    nick_name = serializers.CharField(max_length=20)
     address = serializers.CharField(max_length=255) 
     xxx = serializers.SerializerMethodField(read_only=True)
      # 自定义显示(显示多对 多) 
   class Meta:
       model = User
       # 自定义显示 多对多 字段 
       def get_xxx(self,row): 
       '''row: 传过来的正是 User表的对象''' 
       users = row.username # 获取用户名
        return users # 定义创建语法:
        ser.save()执行,
        就会立刻调用create方法用来创建数据 
        def create(self, validated_data): 
        '''validated_data: 表单或者vue请求携带的json: {"username":"zhangsan","password":"123456"}''' # https://www.cnblogs.com/xiaonq/p/7978409.html 
        return User.objects.create(**validated_data) # 定义更新方法
         def update(self, instance, validated_data): 
         ''' instance : 查询的对象
          validated_data : postman提交的json数据 {"username":"zhangsan","password":"123456"} '''
           if validated_data.get('username'): 
          instance.username = validated_data['username'] 
          instance.save() 
          return instance # 定义单一字段验证的方法 
          def validate_name(self, value):
           if value == 'root':
           raise serializers.ValidationError('不能创建root管理员账号') 
           return value # 定义多字段验证方法
            def validate(self, attrs): 
            print(attrs)
             if attrs.get("username") == 'admin':
              raise serializers.ValidationError('不能创建admin用户')
              return attrs
### Boost C++ Library Serialize 功能的使用方法与示例 Boost 库中的 `serialize` 模块提供了序列化和反序列化的功能,用于将对象的状态保存到文件或流中,并在需要时恢复这些状态。以下是关于如何使用 Boost 的 `serialize` 功能的详细说明和代码示例。 #### 1. 基本概念 Boost 序列化库支持多种数据类型的持久化操作,包括基本类型、容器类型以及自定义类。通过实现特定的成员函数,可以控制类的序列化行为[^1]。 #### 2. 使用步骤 为了实现对象的序列化与反序列化,需要包含头文件 `<boost/archive/text_oarchive.hpp>` 和 `<boost/archive/text_iarchive.hpp>`,并为需要序列化的类定义 `serialize` 成员函数。 #### 3. 示例代码 以下是一个简单的例子,演示如何对一个自定义类进行序列化和反序列化: ```cpp #include <iostream> #include <fstream> #include <boost/archive/text_oarchive.hpp> #include <boost/archive/text_iarchive.hpp> #include <boost/serialization/string.hpp> class MyClass { private: friend class boost::serialization::access; template<class Archive> void serialize(Archive &ar, const unsigned int version) { ar & member1; ar & member2; } std::string member1; int member2; public: MyClass() : member1("Default"), member2(0) {} MyClass(const std::string& s, int i) : member1(s), member2(i) {} void print() const { std::cout << "member1: " << member1 << ", member2: " << member2 << std::endl; } }; void save_object(const MyClass& obj) { std::ofstream ofs("object.txt"); boost::archive::text_oarchive oa(ofs); oa << obj; } MyClass load_object() { MyClass obj; std::ifstream ifs("object.txt"); boost::archive::text_iarchive ia(ifs); ia >> obj; return obj; } int main() { MyClass original("Boost Serialization", 42); original.print(); save_object(original); MyClass loaded = load_object(); loaded.print(); return 0; } ``` #### 4. 注意事项 - 在某些架构上(如 x86-64),可能使用高度优化的汇编实现以提高性能,而在其他架构上则会回退到可移植的 C++ 实现[^2]。 - 需要确保在所有目标平台上测试序列化和反序列化的兼容性。 #### 5. 扩展功能 除了文本格式的存档外,Boost 还支持二进制和 XML 格式的存档,分别通过 `<boost/archive/binary_oarchive.hpp>` 和 `<boost/archive/xml_oarchive.hpp>` 实现。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值