2021-07-06 暑期项目实训心得四


前言

初学DRF经常用到models,也需要我们定义,这里学习各种models的内容


一、models

在这里插入图片描述
models.py在api目录下,可以自定义各种模板

二、models.Field

1.常用Field

1.AutoField

如果没有的话,默认会生成一个名称为 id 的列
如果要显式的自定义一个自增列,必须设置primary_key=True.
有big和small的派生类

2.BooleanField

布尔类型,只能是true或false
如果希望可以为空,可添加Blank=True
或使用子类NullBooleanField

3.CharField

用于存储字符串
必须指定max_length,即最大长度

4.TextField

大文本
默认对应的form标签是textarea。

5.DecimalField

十进制的小数类型
max_digits:数字中允许的最大位数
decimal_places:小数点后最大允许位数

6.IntegerField

存储整数 范围为 (-2^31, 2^31 -1 )
可能用到的派生类“
SmallIntegerField: (-32768, 32767),
IntegerField: (-2147483648, 2147483647),
BigIntegerField: (-9223372036854775808, 9223372036854775807),
PositiveSmallIntegerField: (0, 32767),
PositiveIntegerField: (0, 2147483647),

7.EmailField

存储Email地址,会自动检测是否合法
是charField的子类

8.FloatField

浮点类型double

9.SlugField

减号、下划线、字母、数字
必须指定max_length,即最大长度
slug 是唯一的字段,不能出现重复 slug,所以 SlugField 的属性是 unique=True
SlugField 本质上相当于存放字符串,但是在意义上,主要用于把某些字段形成语义化的,可以访问的短网址(slug)字符串。

2.时间相关Field

1.DateField

日期类型 date
auto_now:保存时自动设置该字段为现在日期,最后修改日期
auto_now_add:当该对象第一次被创建是自动设置该字段为现在日期,创建日期。

2.DurationField

输入持续时间,例如 2年, 5个月等。

3.TimeField

时间 HH:MM[:ss[.uuuuuu]]

4.DateTimeField

日期时间类型 datetime
同DateField的参数

3.其他Field

1.ImageField

图片
height_field,width_field:如果提供这两个参数,则图片将按提供的高度和宽度规格保存。
该字段要求 Python Imaging 库Pillow。
会检查上传的对象是否是一个合法图片。

2.FileField

文件
upload_to:一个用于保存上传文件的本地文件系统路径,该路径由 MEDIA_ROOT 中设置
这个字段不能设置primary_key和unique选项.在数据库中存储类型是varchar,默认最大长度为100

3.FilePathField

path:文件的绝对路径,必填
match:用于过滤路径下文件名的正则表达式,该表达式将用在文件名上(不包括路径)。
recursive:True 或 False,默认为 False,指定是否应包括所有子目录的路径。
例如:FilePathField(path="/home/images", match=“foo.*”, recursive=True) 将匹配“/home/images/foo.gif”但不匹配“/home/images/foo/bar.gif”

4.IPAddressField

IPv4 address地址
子类GenericIPAddressField
一个带有检查 IP地址合法性的CharField
:

5.CommaSeparatedIntegerField

用逗号分割的数字=varchar
继承CharField,所以必须 max_lenght 参数

6.URLField

一个带有URL合法性校验的CharField

7.BinaryField

二进制
存储二进制数据。不能使用filter函数获得QuerySet。

2.常用的参数

1.null
如果是True,Django会在数据库中将此字段的值置为NULL,默认值是False

2.blank
如果为True时django的 Admin 中添加数据时可允许空值,可以不填。如果为False则必须填。默认是False。
null纯粹是与数据库有关系的。而blank是与页面必填项验证有关的

3.primary_key = False
主键,对AutoField设置主键后,就会代替原来的自增 id 列

4.auto_now 和 auto_now_add
auto_now 自动创建—无论添加或修改,都是当前操作的时间
auto_now_add 自动创建—永远是创建时的时间

5.choices
一个二维的元组被用作choices,如果这样定义,Django会select box代替普通的文本框,
并且限定choices的值是元组中的值
GENDER_CHOICE = (
(u’M’, u’Male’),
(u’F’, u’Female’),
)
gender = models.CharField(max_length=2,choices = GENDER_CHOICE)

6.max_length
字段长度

7.default
默认值

8.verbose_name  
Admin中字段的显示名称,如果不设置该参数时,则与属性名。

9.db_column  
数据库中的字段名称

10.unique=True  
不允许重复

11.db_index = True  
数据库索引

12.editable=True  
在Admin里是否可编辑

13.error_messages=None  
错误提示

14.auto_created=False  
自动创建

15.help_text  
在Admin中提示帮助信息

16.validators=[]
验证器

17.upload-to
文件上传时的保存上传文件的目录

三、测试部分field

models.py

class test(models.Model):
    BooleanField=models.BooleanField()
    CharField=models.CharField(max_length=5,blank=True)
    TextField = models.TextField(max_length=5,blank=True)
    DecimalField = models.DecimalField(decimal_places=2,max_digits=5,blank=True)
    FloatField = models.FloatField(blank=True)
    IntegerField = models.IntegerField(blank=True)
    BigIntegerField = models.BigIntegerField(blank=True)
    SmallIntegerField = models.SmallIntegerField(blank=True)
    EmailField = models.EmailField(blank=True)

    class Meta:
        db_table = 'test'#存储的数据库名称
       

cd到项目目录下,建库

python manage.py makemigrations
python manage.py migrate

序列化器serializer.py

class testSerializer(serializers.ModelSerializer):
    class Meta:
        # 使用写好的数据库模型
        model = test
        # 过滤要返回的字段
        fields ='__all__'

视图views.py

class testViewSet(mixins.ListModelMixin, viewsets.GenericViewSet):
    queryset = test.objects.all()
    serializer_class =testSerializer
    def post(self, request, *args, **kwargs):
        """
        传过来的是一个字典,增加一条
        传过来的是一个列表套字典,增加多条数据
        """
        ser = None
        if isinstance(request.data, dict):
            ser = testSerializer(data=request.data)
        elif isinstance(request.data, list):
            ser = testSerializer(data=request.data, many=True)
        ser.is_valid(raise_exception=True)
        ser.save()

        return Response({'code': 999, 'detail': '添加成功'}, status=status.HTTP_201_CREATED)

url.py

router = routers.DefaultRouter()
router.register('test', testViewSet)
urlpatterns = [
    path('admin/', admin.site.urls),
    url(r'^', include(router.urls)),
    url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),

然后进入后端查看效果

在这里插入图片描述


总结

这里对各种model.field进行使用,以便建立小组项目所需的库,如下所示:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值