django-restfreamwork

本文介绍了如何在Django项目中使用Django Restframework构建API。内容包括配置Restframework,简单用法如快捷路由注册,序列化器的创建,以及视图类处理不同类型的HTTP请求,如GET和POST。此外,还提到了根据请求条件筛选数据的方法,并讨论了处理外键数据的额外功能。

首先这是一个django的接口工具,所以是建立在django上的。

配置

settings里的 INSTALLED_APPS 加入 rest_framework

简单用法

它提供了快捷路由,用法很简单:
在项目的url文件里可直接注册

from rest_framework.routers import DefaultRouter
from django.urls import re_path
# 创建路由类对象
router = DefaultRouter()
# 注册路由
router.register(r'你的路由', 路由类, base_name='路由名称')
urlpatterns = [
    # 配置接口路由  re_path 以正则匹配
    re_path('^', include(router.urls)),
]

路由名称一般与路由一致,也可以不写。

接下来是路由类

class PeopleViewSet(viewsets.GenericViewSet):

    # 查询集合, 要返回给前端的数据
    queryset = People.objects.all()
    # 指定使用的序列化器
    serializer_class = PeopleSearializer

People 为项目创建的表

序列化器为restfreamwork返回值的一致方式,写法如下(需新建文件用于存放序列化函数,用时引入即可)

class PeopleSearializer(serializers.ModelSerializer):

    class Meta:
        # 配置需要进行序列化的数据模型
        model = People
        # 配置需要进行序列化的字段 __all__ 表示所有
        fields = '__all__'
        # 指定值时是一个列表
        # fields = ['name']

这样访问端口+路由(get请求)即可返回全部参数

这是基本的用法,可以在这些基础上加一些东西
(不同请求的处理):
视图类需要应对不同类型请求
restfreamwork也提供了这些方法,
只需让路由类继承restfreamwork内置的函数即可处理不同类型的请求。
比如处理post请求需要用到mixins.CreateModelMixin这个函数

from rest_framework import mixins, viewsets
from rest_framework.response import Response

class PeopleViewSet(mixins.CreateModelMixin, viewsets.GenericViewSet):

    # 收到post请求是执行的函数
    def create(self, request, *args, **kwargs):
    	return Response({‘msg’:‘success’})

其他的可以在mixins这个类中看到

这些只是处理不同请求:
当然不可能只有这么多东西,这只是简单的返回数据
还有的就是要根据要求返回数据,

首先,数据模型类中需要继承APIView
具体结构如下

from rest_framework.views import APIView


class BannerView(APIView):
    def get(self, request):
        return Response(data)

    def post(self, request):
        return Response(data)

可在函数内进行相应处理
按条件取数据的处理方式:
大致步骤如下:
首先获取请求中的条件参数
从表中取相应数据
利用序列化函数将数据对象返回成字典形式

代码示例

need = request.GET.get('id')
designer = Designer.objects.get(id=need)
designer_ser = DesigerSerializer(designer)

Designer为数据库表
DesigerSerializer为序列化函数
此时的designer_ser.data就是我们的数据了

额外

这个部分我也不是很懂,只知道作用

前提:

数据库表含有外键

 designer = Designer.objects.get(id=request.GET.get('did'))
 designer_ser = DesigerSerializer(designer)
 # 一个很神奇的操作,可从被设置为设置外键的表内取数据
 case_ser = CaseSerializer(designer.case_set.all(), many=True)

case_ser.data 为我们需要的数据
利用case_set莫名其妙的吧外键中的数据取了出来
不知到为什么,但应该很有用

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值