Django-REST-framework(DRF)框架的使用、序列化器

创建django项目

在这里插入图片描述

配置settings.py文件

解决跨域

下载django-cors-headers

pip install django-cors-headers 

在settings文件中配置
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

配置数据库

在这里插入图片描述

配置__init__.py文件

下载mysql

pip install mysql

配置__init__.py文件

import pymysql
pymysql.install_as_MySQLdb()

在models.py文件中创建表、迁移数据

创建表

from django.db import models

# Create your models here.

# 角色表
class Roles(models.Model):
    rname=models.CharField(max_length=20)
    def __str__(self):
        return self.rname
# 用户表
class Users(models.Model):
    uname=models.CharField(max_length=10)
    role=models.ForeignKey('Roles',on_delete=models.CASCADE)#外键

# 自关联
class Menu(models.Model):
    authName=models.CharField(max_length=10)
    path=models.CharField(max_length=50)
    parent=models.ForeignKey('self',on_delete=models.CASCADE,null=True,related_name='children')
    class Meta:
        db_table='menu'




迁移数据库
第一种方式:

  1. 运行manage.pyn任务
    在这里插入图片描述
  2. 记录迁移
    在这里插入图片描述
  3. 执行迁移
    在这里插入图片描述

第二种方式:

在终端执行

  1. python manage.py makemigrations (记录迁移)
  2. python manage.py migrate (执行迁移)

在api中创建序列化器Serializers.py 文件

在Serializers.py 文件中创建序列化器

外联序列化器


#引入集合(表)
from api.models import *

# 创建角色序列化器
class RoleSerializer(serializers.ModelSerializer):
    class Meta:
        model = Roles
        fields = '__all__'
# 创建用户序列化器
# 如果查询表用UserSerializer序列化器
class UserSerializer(serializers.ModelSerializer):
    # 外键
    role=RoleSerializer()
    class Meta:
        model = Users
        fields = '__all__'
# 如果操作表用UsersSerializer序列化器
class UsersSerializer(serializers.ModelSerializer):
    class Meta:
        model = Users
        fields = '__all__'

搜索序列化器

# 搜索
class UsersFilter(django_filters.FilterSet):
    # 根据这个字段搜索
    # icontains模糊搜索
    uname = django_filters.CharFilter(lookup_expr='icontains')
    class Meta:
        model = Users
        fields = ['uname']

分页序列化器

# 分页
class CustomPagination(PageNumberPagination):
    page_size =3
    page_query_param = 'pagenum'
    page_size_query_param = 'pagesize'
    max_page_size = 5
    def get_paginated_response(self, data):
        return Response(OrderedDict([
            ('count', self.page.paginator.count),
            ('data', data)
        ]))

自关联序列化器

# 自关联
class MenuSerializer(serializers.ModelSerializer):
    def get_fields(self):
        fields=super(MenuSerializer,self).get_fields()
        fields['children']=MenuSerializer(many=True)
        return fields
    class Meta:
        model = Menu
        fields = '__all__'

在views.py文件中写接口

操作接口

# 角色接口
class RoleView(ModelViewSet):
    queryset = Roles.objects.all()
    serializer_class = RoleSerializer

# 用户接口
class UserViewsSet(ModelViewSet):
    queryset = Users.objects.all()
    serializer_class = UserSerializer
    # DjangoFilterBackend用于搜索     OrderingFilter用于排序
    filter_backends = [DjangoFilterBackend]
    # 分页
    pagination_class = CustomPagination
    # 搜索
    filterset_class = UsersFilter
    # 排序
    # OrderingFilter默认所有字段都可以进行排序
    # ordering_fields 只对指定的字段进行排序
    ordering_fields = ('id', 'create_time')
    # 返回序列化器类
    def get_serializer_class(self):
        # 如果操作表用UsersSerializer序列化器
        if self.action=='update' or self.action=='partial_update':
            return UsersSerializer
        # 如果查询表用UserSerializer序列化器
        else:
            return UserSerializer

自关联接口

# 自关联
class MenuView(ModelViewSet):
    queryset = Menu.objects.filter(parent_id=None)
    serializer_class = MenuSerializer

配置二级路由

  1. 在api中创建urls.py文件
  2. 在根路由设置路由
    在这里插入图片描述
  3. 在api中的urls…py文件中配置二级路由
    在这里插入图片描述

DRF文档:https://www.django-rest-framework.org/
Django-filter文档:https://django-filter.readthedocs.io/en/latest/index.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值