1.创建model时,class Meta的作用是什么?
class products_dddd(models.Model):
"""
产品表
"""
productName = models.CharField("产品描述",max_length=30,default="",null=False,help_text="产品名称")
productDesc = models.CharField("产品描述",max_length=255,default="",null=False,help_text="产品描述")
accountDatabase = models.CharField("账号数据表",max_length=128,default="",null=False,help_text="账号数据表")
class Meta:
verbose_name = "公司的所有产品表"
verbose_name_plural = verbose_name
unique_together = ('productName', 'accountDatabase')
def _str_(self):
return self.productName
class Meta的作用是给model定义元数据,下面是可以用到的Meta选项,但没有一个选项是必需的。
- app_label:只在一种情况下使用,即当模型类不在默认的应用程序包的models.py文件中时,需要指定模型是哪个应用程序的。比如在testapp中写了一个模型,不是当前模型类,那么就需要执行使用:app_label=‘testapp’
- db_table:Django有默认的数据库表名生成规则,如果想用自定义表名则可以使用:table_name=‘my_products’
- db_tablespace:有些数据库是有数据库表空间的,比如Oracle。可以通过db_tablespace来指定这个模型对应的数据库放在哪个数据库表空间。
- get_latest_by:由于Django的管理方法中有个lastest()方法,就是得到最近一行记录。如果数据模型中有 DateField 或 DateTimeField 类型的字段,就可以通过这个选项来指定lastest()是按照哪个字段进行选取的。一个 DateField 或 DateTimeField 字段的名字. 若提供该选项, 该模块将拥有一个 get_latest() 函数以得到 “最新的” 对象(依据那个字段):get_latest_by = “order_date”
- managed:由于Django会自动根据模型类生成映射的数据库表,如果你不希望Django这么做,可以把managed的值设置为False。默认值为True,这个选项为True时Django可以对数据库表进行 migrate或migrations、删除等操作。在这个时间Django将管理数据库中表的生命周期如果为False的时候,不会对数据库表进行创建、删除等操作。可以用于现有表、数据库视图等,其他操作是一样的。
- order_with_respect_to:这个选项一般用于多对多的关系中,它指向一个关联对象。
- ordering:这个字段是告诉Django模型对象返回的记录结果集是按照哪个字段排序的。不论使用了多少个字段排序, admin 只使用第一个字段。
- permissions:为了在Django Admin管理模块下使用的,如果设置了这个属性可以让指定的方法权限描述更清晰可读。
- unique_together:需要通过两个字段保持唯一性时使用。这会在 Django admin 层和数据库层同时做出限制(也就是相关的 UNIQUE 语句会被包括在 CREATE TABLE 语句中)。比如:一个Person的FirstName和LastName两者的组合必须是唯一的,那么需要这样设置:unique_together = ((“first_name”, “last_name”),)
- verbose_name:给模型类起一个更可读的名字,若未提供该选项, Django 则会用一个类名字的 munged 版本来代替: CamelCase becomes camel case。
- verbose_name_plural:这个选项是指定,模型的复数形式是什么,若未提供该选项, Django 会使用 verbose_name + “s”。
2.view.py 中新增对应视图类
- BaseListModelViewSet
get请求:用户获取信息,不对数据进行修改或者其他操作
- BaseCreateModelViewSet
post请求:用户提交操作,向服务器端发送数据,但是该请求会改变数据的种类等资源,就像数据库的insert操作一样,会创建新的内容
- BaseUpdateModelViewSet
put请求:用于修改数据内容,向服务器端发送数据,从而改变信息,就像数据库的update操作一样,用来修改数据的内容,但是不会增加数据的种类等
- BaseRetrieveModelViewSet
patch请求:用于部分替换数据内容(一般比较少使用)
- BaseDestrovModelViewSet
delete请求:用于删除资源
3.在serializers层定义product_serializer.py 文件需要注意继承哪一类serializer
定义serializer_class
继承
- 涉及数据库操作,且自动生成的校验可适用,推荐继承serializers.ModelSerializer
- 不涉及数据库操作,或自动的校验机制不适用,则继承serializer.Serializer
fields
- get 请求中,fields为出参定义,其他请求中,fields为入参定义
- 如果参数需要特殊定义(有默认值不需要用户传参,字段在数据库中不存在等情况),需要在class Meta外进行单独的参数定义
validators:校验器
model:数据表
4.post插入中文字段乱码