Django 第一次编写接口时的疑问

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插入中文字段乱码

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值