day01视图,序列化器
1.1DRF视图
1.建立在django基础之上的web开发框架
- List item
- 使用https协议
- 尽量出现api字样 api.laufing.com
-****** 路径里尽量出现版本号 如: /v1/user/users/****** - !!路径中尽量用名词 如 :/v1/user/users/*
- 采用请求方式对资源进行操作 GET /v1/user/users/;POST /v1/user/users/;PUT/v1/user/users/ ;DELETE /v1/user/users/
- 路径中拼接字符串,实现数据过滤,分页,排序?..
- 原生django: request.GET.get('‘page’) request.POST.get(‘username’)
DRF:request.query_params.get(‘page’) request.data.get(‘username’)
- 提供了序列化器Serialzier 和反序列化
- 提供丰富的类视图、扩展类、视图集来简化视图。
4.提供了认证、权限、频率、过滤、分页、接口文档功能。
5.REST framework提供了一个API 的Web可视化界面, 便查看、测接口。
1.2序列化和反序列化
1.2.1序列化反序列化的区别
序列化:
将模型类的对象转化为字典,经过Response转化为json字符串
反序列化:
json字符串经过Reponse对象转化为字典,然后经过序列化器转为模型类对象
定义序列化器的方法
序列化器:rest_framework.serializers.Serializer
模型类序列化器:rest_framework.serializers.ModelSerializer
1.2.2Serializer使用方式
1.反序列化中插入数据时,必须重写create方法
2.反序列化更新数据,必须重新update方法
1.3 混入扩展类
扩展类 | 封装方法 | 解释 |
---|---|---|
ListModelMixin | list | 获取数据 |
CreateModelMixin | create | 新增数据 |
RetrieveModelMixin | retrieve | 获取指定数据 |
UpdateModelMixin | update | 修改指定数据 |
DestroyModelMixin | destroy | 删除指定数据 |
1.4子类视图
扩展类 | 继承 | 方法 |
---|---|---|
ListAPIView | GenericAPIView、ListModelMixin | get |
CreateAPIView | CreateAPIViewGenericAPIView、CreateModelMixin | post |
RetrieveAPIView | GenericAPIView、RetrieveModelMixin | get |
UpdateAPIView | GenericAPIView、UpdateModelMixin | put |
DestroyAPIView | GenericAPIView、DestroyModelMixin | delete |
ListCreateAPIView | ListCreateAPIViewGenericAPIView、ListModelMixin、CreateModelMixin | get,post |
RetrieveUpdateAPIView | RetrieveUpdateAPIViewGenericAPIView、RetrieveModelMixin、UpdateModelMixin | get,put |
RetrieveDestroyAPIView | GenericAPIView、RetrieveModelMixin、DestroyModelMixin | get,delete |
RetrieveUpdateDestroyAPIView | GenericAPIView、RetrieveModelMixin、UpdateModelMixin、DestroyModelMixin | get,put,delete |
编写序列化器
from rest_framework import serializers
from .models import * # . 代表当前目录或者当前的包 * 代表导入所有
from rest_framework.exceptions import ValidationError
# 部门的序列化器
class DepartmentSerializers(serializers.Serializer): # Serializer是底层的意思
#label read_only只允许序列化输出不支持序列化输入
id=serializers.IntegerField(label='ID',read_only=True)
# min_length 最小长度 allow_blank,allow_null控制反序列化的时候不用传值 trim_whitespace截断两边的空格
name=serializers.CharField(label='部门名称',min_length=2,max_length=10,allow_null=True,allow_blank=True,trim_whitespace=True)
# 采用modelserializers
class DepartmentModelSerializers(serializers.ModelSerializer):
class Meta:
model=Department
fields='__all__'
read_only_fields=['id']
# 职责的序列化器
class DutySerializer(serializers.Serializer):
#label read_only只允许序列化输出不支持序列化输入
id = serializers.IntegerField(label='ID', read_only=True)
# min_length 最小长度 allow_blank,allow_null控制反序列化的时候不用传值(允许为空) trim_whitespace截断两边的空格
name = serializers.CharField(label='职务名称', min_length=2, max_length=10, allow_null=True, allow_blank=True,trim_whitespace=True)
# 采用modelserializers
class DutyModelSerializers(serializers.ModelSerializer):
class Meta:
model=Duty
fields='__all__'
read_only_fields=['id']
# 员工的序列化器
class StaffSerializers(serializers.Serializer):
#label read_only只允许序列化输出不支持序列化输入
id = serializers.IntegerField(label='ID', read_only=True)
# min_length 最小长度 allow_blank,allow_null控制反序列化的时候不用传值(允许为空) trim_whitespace截断两边的空格
name = serializers.CharField(label='职务名称', min_length=2, max_length=10, allow_null=True, allow_blank=True,trim_whitespace=True)
# 性别 default 默认
sex=serializers.IntegerField(label='性别',default=1)
# 手机号
phone=serializers.CharField(label='手机号',min_length=11,max_length=11,allow_null=True,allow_blank=True)
# 外键 可以序列化输出也可以序列化输入 queryset
deparment=serializers.PrimaryKeyRelatedField(queryset=Department.objects.all())
duty=serializers.PrimaryKeyRelatedField(queryset=Duty.objects.all())
#
# 序列化方法字段
deparment_name=serializers.SerializerMethodField(read_only=True)
def get_deparment_name(self,obj):
return obj.deparment.name # 拿到的部门的数据对象
duty_name=serializers.SerializerMethodField(read_only=True)
def get_duty_name(self,obj):
return obj.duty.name
# 数据校验
def validate(self, attrs): # attrs前端传过来的用户字典(类字典)
name=attrs.get('name')
phone=attrs.get('phone')
if phone.startswith('13'):# startswith 是开头的意思
raise ValidationError('手机号不符合')
# 校验符合条件
return attrs
# 重写create方法
def create(self, validated_data):
staff=Staff.objects.create(**validated_data) # 添加到数据库并返回一个对象
return staff
# 重写updata方法
def update(self, instance, validated_data):
instance.name=validated_data.get('name')
instance.save() # 保存
return instance
class StaffModelSerializers(serializers.ModelSerializer):
class Meta:
model=Staff
fields='__all__'
read_only_fields=['id']
子类视图增删查改
# 输出员工的信息
class AllView(ListCreateAPIView):
queryset = Staff.objects.all()
serializer_class = StaffSerializers
# 实现删和改的视图
class XiuView(RetrieveUpdateDestroyAPIView):
queryset = Staff.objects.all()
serializer_class = StaffSerializers
lookup_field = 'pk'
lookup_url_kwarg = 'pk'
day02 Element-ui
2.1对Element-ui的概述
上手步骤:
1.找到样式组件
2.复制到对应的.vue组件
3.修改对应的数据
2.2 element-ui的安装
安装
npm install --save element-ui
在main.js下配置
npm install --save element-ui
2.3在element-ui中的组件数据
地址:https://element.eleme.cn/#/zh-CN/component/installation