博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DRF框架--视图
阅读量:4984 次
发布时间:2019-06-12

本文共 5286 字,大约阅读时间需要 17 分钟。

APIView和View区别        -- APIView继承了View        -- 豁免csrf        -- 封装了request 用Request        -- _request是旧的request        -- request.query_params == _request.GET        -- request.data == _request.POST _request.FIles    序列化组件        序列化            -- 声明一个序列化器                类比我们的model                class BookSerializer(serializers.Serializer):                    id = serializers.IntegerField(required=False)                    title = serializers.CharField(max_length=32)                    pub_time = serializers.DateField()            -- 序列化我们的queryset                ser_obj = BookSerializer(queryset, many=True)                return Response(ser_obj.data)        反序列化 POST请求            -- 序列化器                正序以及反序字段类型不统一的情况                required = False                read_only = True                write_only = True                写create方法            -- 视图                ser_obj = BookSerializer(data=request.data)                if ser_obj.is_valid():                    # 校验通过的数据在ser_obj.validated_data                    ser_obj.save()                    return Response(ser_obj.data)                return Response(ser_obj.errors)今日内容    restfull规范    序列化组件         验证        ModelSerializer    视图的封装内容详细    restfull规范        REST风格  表述性状态转移 web交互方案        资源  在web中只要有被引用的必要都是资源        URI               URI 统一资源标识符            URL 统一资源定位符        统一资源接口            根据HTTP请求方式的不同对资源进行不同的操作            遵循HTTP请求方式的语义        前后端传输的叫资源的表述        前端展现的叫资源的状态        通过超链接的指引告诉用户接下来有哪些资源状态可以进入    restfull规范        核心思想            -- 面向资源去编程                每个url就是资源的体现 尽量用名词不要用动词            -- 根据HTTP请求方式的不同对资源进行不同的操作        URL体现            -- 版本                https://v3.bootcss.com                https://bootcss.com/v3            -- 体现是否是API                https://v3.bootcss.com/api            -- 过滤信息                https://v3.bootcss.com?page=1            -- 尽量用HTTPS        返回值体现            -- 携带状态码            -- 携带错误信息            -- 返回值                get  返回查看的所有或者单条信息                post 返回新增的那条数据                put/patch 返回更新那条数据                delete  返回空            -- 携带超链接    序列化组件  验证        单个字段校验  2222222            def validate_xxxxx(self, value):                raise serializers.ValidationError("xxxxx")                return value        多个字段  3333333            def validate(self, attrs):                attrs 前端传过来的所有的数据组成的字典                raise serializers.ValidationError("xxxxx")                return attrs        自定义  !!!!!!111111            def my_validate(value):                raise serializers.ValidationError("xxxxx")                return value            title = serializers.CharField(max_length=32, validators=[my_validate, ])    ModelSerializer 帮我们写了create以及update方法        -- class BookSerializer(serializers.ModelSerializer):                class meta:                    model= 对应的模型对象                    fields = "__all__"/ ["", ""]                    exclude = [""] 排除某些字段                    depth = 1 根据你的外键关系找几层                     # 会让你所有的外键变成read_only = True                    extra_kwargs = {                        "字段名称": {参数}                    }        -- SerializerMethodField 方法字段            会将钩子方法的返回值给字段            def get_字段名称(self, obj):                obj 是我们循环序列化的每个模型对象                return 自己想要的数据    Response        携带HTTP标准状态码        做模板的渲染    视图组件        -- 第一次封装            class GenericAPIView(APIView):                query_set = None                serializer_class = None                                def get_queryset(self):                    return self.query_set                                    def get_serializer(self, *args, **kwargs):                    return self.serializer_class(*args, **kwargs)            class ListModelMixin(object):                def list(self, request):                    queryset = self.get_queryset()                    ser_obj = self.get_serializer(queryset, many=True)                    return Response(ser_obj.data)            class BookView(GenericAPIView, ListModelMixin):                query_set = Book.objects.all()                serializer_class = BookSerializer                                def get(self, request):                    return self.list(request)        -- 第二次封装            为了方便继承        -- 第三次            ViewSetMixin                 -- 重写了as_view()                -- 路由可以传参                            for method, action in actions.items():                # method  == 请求方式  get                # action == list                handler = getattr(self, action)                # handler = 自己的视图类.list                # handler 就是我们封装的list方法                setattr(self, method, handler)                # 自己的视图类.get = 我们自己封装的list方法                # 在执行dispatch方法分发之前 self.get = self.list                return self.dispatch(request, *args, **kwargs)            class BookModelView(ModelViewSet):                query_set = Book.objects.all()                serializer_class = BookSerializer    路由组件        -- 导入             from rest_framwork.routers import DefaultRouter        -- 实例化            router = DefaultRouter()        -- 注册            router.register("list", BookModelView)        -- 把默认生成的路由注册            urlpatterns += router.urls        !! 默认生成的路由都是带参数的!!

转载于:https://www.cnblogs.com/xxy614899502/p/10103722.html

你可能感兴趣的文章
洛谷P1886 滑动窗口
查看>>
Shell编程(二)Bash中调用Python
查看>>
主动与被动监控 拓扑图组合图 自定义监控
查看>>
SQL总结(一)基本查询
查看>>
PDF分割--可脱离python环境执行,可传参数,可弹窗的PC端小工具
查看>>
cas-client-core单点登录排除不需要拦截的URL
查看>>
OCR技术浅探 : 文字定位和文本切割(2)
查看>>
jmeter集合点
查看>>
Java类代码块执行顺序
查看>>
克鲁斯卡尔(模板题)
查看>>
汉字转拼音
查看>>
Python中Web框架编写学习心得
查看>>
dataTable/dataSet转换成Json格式
查看>>
asp.net core模块学习
查看>>
MySQL远程连接不上的解决方法
查看>>
如何使用JMeter从文件中提取数据
查看>>
AndroidBase基础类文档
查看>>
使用delphi 开发多层应用(十九) ios通过soap 访问kbmmw服务器
查看>>
三大特征 封装 继承 多态
查看>>
Python 3 函数分类
查看>>