Django DRF的使用

前言

DRF 框架,全称为 Django Rest Framework,是 Django 内置模块的扩展,用于创建标准化 RESTful API;它利用 ORM 映射数据库,并自定义序列化数据进行返回,多用于前后端分离项目。

Django与DRF的区别:

django:将数据库的东西通过ORM的映射取出来,通过view文件,按照template文件排出的模板渲染成HTML。当用户请求相应的url时,返回相应的结果。

DRF:DRF是Django的超集(就是前者有的东西是后者没有的东西),去掉了模板的部分,提供了一个REST的接口,同时也提供了满足该接口的代码工作流。同时,在REST的规范下,升级了权限和分页等功能,增加了限流和过滤搜索等功能。

序列化器的了解

序列化器的作用

序列化:序列化器会把模型对象转换成字典,经过response以后变成json字符串

反序列化:把客户端发送过来的数据,转换成request字典,序列化器可以把字典转成模型,再此过程中可以实现数据检验功能

模型常用字段

创建模型时需要使用一些字段,通过ORM将模型对象自动持久化到关系数据库中。一些常用字段放在最后查看

在这里插入图片描述

序列化器的使用

1. 环境搭配

安装所需库

pip install django
pip install djangorestframework

创建项目

mkdir django-drf #放置代码的文件夹
cd mkdir
django-admin startproject mysite #创建项目

这样我们就创建好了一个django项目
在这里插入图片描述

我们可以看到创建了如下目录和文件

mysite/             #根目录,项目的容器
    manage.py       #django项目管理命令工具
    mysite/         #项目
        __init__.py #空文件,旨在认为是一个包
        settings.py #项目配置文件
        urls.py     #URL声明
        asgi.py     #ASGI
        wsgi.py     #WSGI
2. 创建模型以及数据迁移

OK,经过上面,我们以及创建了一个基本的Django项目,接下来就是项目程序编写,我们先创建应用,一般一个应用用于解决一个实际需求,现在创建一个名为app的应用来解决的我们初次学习djanog这个需求

python manage.py startapp drf #需要在mysite下输入,创建一个名为drf的应用

创建好app以后,我们要将这个包添加到setting中才能使用,并且配置rest_framework

# settings.py

INSTALLED_APPS = [
    ...
    'rest_framework',
    'drf'
]

创建一个名为student的数据模型

# mysite/drf/models.py

class Student(models.Model):
    id = models.AutoField(primary_key=True)#主键
    name = models.CharField(max_length=100,verbose_name='学生姓名')
    sex = models.BooleanField(default=1,verbose_name="性别")
    age = models.IntegerField(verbose_name="年龄")
    class_null = models.CharField(max_length=5,verbose_name="班级编号")
    description = models.TextField(max_length=1000,verbose_name="个性签名")
    
    class Meta:
        db_table="tb_student"
        verbose_name = "学生"
        verbose_name_plural = verbose_name

进行数据迁移

python manage.py makemigrations #数据迁移
python manage.py migrate #创建表结构
3. 序列化模型
# mysite/drf/serializers.py  创建一个serializers文件


from rest_framework import serializers
from .models import Student

class StudentSerializers(serializers.ModelSerializer):
    """
    使用Serializer需要自己定义字段
    ModelSerializer默认直接导入model字段
    """
    class Meta:
        # model指明该序列化器处理的数据字段从模型类Student参考生成
        model = Student
        # fields指明该序列化器包含模型类中的那些字段,‘all’指明包含所有字段
        # 需要序列化的字段,可自由选择
        fields = "__all__"
4. 编写视图
# mysite/drf/voews.py

from .models import Student
from rest_framework.viewsets import ModelViewSet
from .serializers import StudentSerializers
# Create your views here.

class StudentModelViewSet(ModelViewSet):
    "学生模型视图"
    #指明该视图在进行序列化在查询数据时使用的查询集
    queryset = Student.objects.all()
    #serializer_class指明该视图在进行序列化或反序列化时使用的序列化器
    serializer_class = StudentSerializers
5. 编写路由
# mysite/drf/urls.py

from rest_framework.routers import DefaultRouter
from . import views
router = DefaultRouter()#可以处理视图的路由器
router.register("student",views.StudentModelViewSet,basename="student")#向视图中注册视图集
#路由列表
urlpatterns = []+router.urls#将路由器中的所有路由追加到django的路由列表中

到这里,我们就把django drf的基本流程走了一遍,通过命令行运行后打开浏览器访问该网址

python manage.py runserver

在这里插入图片描述

结束

模型常用字段

字段字段构造方式
BooleanFieldBooleanField()
NullBooleanFieldNullBooleanField()
CharFieldCharField(max_length=None, min_length=None, allow_blank=False, trim_whitespace=True)
EmailFieldEmailField(max_length=None, min_length=None, allow_blank=False)
RegexFieldRegexField(regex, max_length=None, min_length=None, allow_blank=False)
SlugFieldSlugField(maxlength=50, min_length=None, allow_blank=False) 正则字段,验证正则模式 [a-zA-Z0-9-]+
URLFieldURLField(max_length=200, min_length=None, allow_blank=False)
UUIDFieldUUIDField(format=‘hex_verbose’) format: 1) 'hex_verbose'"5ce0e9a5-5ffa-654b-cee0-1238041fb31a" 2) 'hex'"5ce0e9a55ffa654bcee01238041fb31a" 3)'int' - 如: "123456789012312313134124512351145145114" 4)'urn' 如: "urn:uuid:5ce0e9a5-5ffa-654b-cee0-1238041fb31a"
IPAddressFieldIPAddressField(protocol=‘both’, unpack_ipv4=False, **options)
IntegerFieldIntegerField(max_value=None, min_value=None)
FloatFieldFloatField(max_value=None, min_value=None)
DecimalFieldDecimalField(max_digits, decimal_places, coerce_to_string=None, max_value=None, min_value=None) max_digits: 最多位数 decimal_palces: 小数点位置
DateTimeFieldDateTimeField(format=api_settings.DATETIME_FORMAT, input_formats=None)
DateFieldDateField(format=api_settings.DATE_FORMAT, input_formats=None)
TimeFieldTimeField(format=api_settings.TIME_FORMAT, input_formats=None)
DurationFieldDurationField()
ChoiceFieldChoiceField(choices) choices与Django的用法相同
MultipleChoiceFieldMultipleChoiceField(choices)
FileFieldFileField(max_length=None, allow_empty_file=False, use_url=UPLOADED_FILES_USE_URL)
ImageFieldImageField(max_length=None, allow_empty_file=False, use_url=UPLOADED_FILES_USE_URL)
ListFieldListField(child=, min_length=None, max_length=None)
DictFieldDictField(child=)

选项参数:

参数名称作用
max_length最大长度
min_lenght最小长度
allow_blank是否允许为空
trim_whitespace是否截断空白字符
max_value最小值
min_value最大值

通用参数:

参数名称说明
read_only表明该字段仅用于序列化输出,默认False
write_only表明该字段仅用于反序列化输入,默认False
required表明该字段在反序列化时必须输入,默认True
default反序列化时使用的默认值
allow_null表明该字段是否允许传入None,默认False
validators该字段使用的验证器
error_messages包含错误编号与错误信息的字典
label用于HTML展示API页面时,显示的字段名称
help_text用于HTML展示API页面时,显示的字段帮助提示信息
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值