​day01视图,序列化-----day2 element-ui

​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’)
  1. 提供了序列化器Serialzier 和反序列化
  2. 提供丰富的类视图、扩展类、视图集来简化视图。
    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 混入扩展类

扩展类封装方法解释
ListModelMixinlist获取数据
CreateModelMixincreate新增数据
RetrieveModelMixinretrieve获取指定数据
UpdateModelMixinupdate修改指定数据
DestroyModelMixindestroy删除指定数据

1.4子类视图

扩展类继承方法
ListAPIViewGenericAPIView、ListModelMixinget
CreateAPIViewCreateAPIViewGenericAPIView、CreateModelMixinpost
RetrieveAPIViewGenericAPIView、RetrieveModelMixinget
UpdateAPIViewGenericAPIView、UpdateModelMixinput
DestroyAPIViewGenericAPIView、DestroyModelMixindelete
ListCreateAPIViewListCreateAPIViewGenericAPIView、ListModelMixin、CreateModelMixinget,post
RetrieveUpdateAPIViewRetrieveUpdateAPIViewGenericAPIView、RetrieveModelMixin、UpdateModelMixinget,put
RetrieveDestroyAPIViewGenericAPIView、RetrieveModelMixin、DestroyModelMixinget,delete
RetrieveUpdateDestroyAPIViewGenericAPIView、RetrieveModelMixin、UpdateModelMixin、DestroyModelMixinget,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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值