zoukankan      html  css  js  c++  java
  • drf初始

    目录
    Web API接口
    什么是Web API接口
    接口四大特征
    接口文档的编写测试
    restful接口规范
    url链接设计
    五大请求方式
    响应结果
    DRF框架安装
    基于原生Django实现十大接口
    Django CBV源码分析
    Web API接口
    什么是Web API接口
    我们来看下面的两个url例子:那个看起来更像是接口?
    
    https://www.baidu.com
    https://api.map.baidu.com/search
    明显第二个网址看起来更像是接口。
    
    第一个url返回网页,叫网址
    
    第二个返回数据,叫接口
    
    那么接口就是通过规定的请求方式访问的url链接
    
    接口规定了提交请求参数的请求方式,访问其可以获取响应的数据
    
    Web API 接口和一般的url链接还是有区别的,Web API接口简单概括有以下四大特点
    
    接口四大特征
    url链接:长得像返回数据的url链接(https://api.map.baidu.com/place/v2/search)
    请求方式:get、post、put、patch、delete
    请求参数:请求携带的参数或者数据包(parmas or body)
    响应数据:json或xml格式的数据
    通过访问以下接口并携带参数,可以返回想要的数据:
    https://api.map.baidu.com/place/v2/search?ak=hwXbwDEvhyGtKwmh6IMhRWyeOoilo7Uv&region=上海&query=肯德基&output=json
        
    ak:应用唯一标识码
    region:搜索地区
    query:搜索地点
    output:返回数据的格式
    
    {
        "status":0,
        "message":"ok",
        "results":[
            {
                "name":"肯德基(罗餐厅)",
                "location":{
                    "lat":31.415354,
                    "lng":121.357339
                },
                "address":"月罗路2380号",
                "province":"上海市",
                "city":"上海市",
                "area":"宝山区",
                "street_id":"339ed41ae1d6dc320a5cb37c",
                "telephone":"(021)56761006",
                "detail":1,
                "uid":"339ed41ae1d6dc320a5cb37c"
            }
            ...
            ]
    }
    接口文档的编写测试
    yapi接口文档工具(web在线接口编写工具)
    postman接口测试工具
    
    
    
    
    restful接口规范
    REST:英文representational state transfer直译为表现层状态转移,或者表述性状态转移;Rest是web服务的一种架构风格,一种设计风格,是一种思想;同时Rest不是针对某一种编程语言的。
    
    以webService为例通俗解释,我们需要编写一个功能的时候以往我们都会这么写:
    
    http://localhost:8080/admin/getUser (查询用户)
    
    http://localhost:8080/admin/addUser (新增用户)
    
    http://localhost:8080/admin/updateUser (更新用户)
    
    http://localhost:8080/admin/deleteUser (删除用户)
    
    以不同的URL(主要为使用动词)进行不同的操作。
    
    Rest架构:**
    
    GET http://localhost:8080/admin/user (查询用户)
    
    POST http://localhost:8080/admin/user (新增用户)
    
    PUT http://localhost:8080/admin/user (更新用户)
    
    DELETE http://localhost:8080/admin/user (删除用户)
    
    总结:URL只指定资源,以HTTP方法动词进行不同的操作。用HTTP STATUS/CODE定义操作结果。
    
    Restful:遵守了rest风格的web服务便可称为Restful。
    
    为什么需要Restful?
    
    url链接具有很强的可读性
    规范化请求和响应
    资源描述与视图的解耦合
    提高交互性,方便为第三方服务提供服务
    提供无状态的服务接口,降低复杂度,提高应用的水平扩展性。
    RESTful作为目前最流行的API设计规范,一定有着它独有的魅力:强大、简洁、易上手
    
    那么RESTful规范有哪些呢?
    
    请往下看:
    
    url链接设计
    接口采用https协议,保证数据安全
    接口使用特定关键字(api)表示
    接口操作的数据称之为资源,体现资源名词,尽量不体现操作资源动词(如特殊的比如登录可以使用动词)
    接口资源多版本共存使用特定关键字(v1、v2)区分版本
    接口群操作限制条件使用?
    五大请求方式
    get:获取单个或多个资源
    post:新增单个或多个资源
    put:整体修改单个或多个资源
    patch:局部修改单个或多个资源
    delete:删除单个或多个资源,不做任何资源返回
    响应结果
    应包含网络状态码 (200,201)
    应包含数据状态码(0成功,1失败,2无数据)
    应包含数据状态信息(对数据的描述)
    应包含数据结果(results,常量、数组、字典),若存在图片资源则是url的请求链接
    DRF框架安装
    我们在了解了Web API接口和RESTful接口规范后,我们要在后端使用这个RESTful规范我们要先安装这个框架
    
    DRF即-- django-restframework
    
    DRF是Django的插件,所以必须确保安装了Django
    
    pip3 install djangorestframework
    使用DRF时,要在settings中注册
    
    INSTALLED_APPS = (
        ...
        'rest_framework',
    )
    基于原生Django实现十大接口
    我们已经知道了五大请求方式,基于五大请求方式,我们可以对请求进行 单|群 操作
    
    api/urls.py
    
    from django.conf.urls import url
    
    from . import views
    urlpatterns = [
        url(r'^books/$', views.BookView.as_view()),
        url(r'^books/(?P<pk>d+)/$', views.BookView.as_view())
    ]
    api/models.py
    
    from django.db import models
    
    class Book(models.Model):
        name = models.CharField(max_length=64)
        price = models.DecimalField(max_digits=5, decimal_places=2)
    api/views.py
    
    from django.http import JsonResponse
    from django.views import View
    
    # 一个视图类可以保护常规五个请求方法:get|post|put|patch|delete
    # 五个请求方法处理十个资源操作的逻辑:单群查|单群增|单群整体改|单群局部改|单群删
    
    from . import models
    class BookView(View):
    
        def _single_get(self, pk):
            book_dic = models.Book.objects.filter(pk=pk).values('name', 'price').first()
            if not book_dic:
                return JsonResponse({
                    'status': 1,
                    'msg': '单查 资源不存在',
                })
            return JsonResponse({
                'status': 0,
                'msg': '单查 ok',
                'results': book_dic
            })
        def _many_get(self):
            book_query = models.Book.objects.values('name', 'price')
            book_list = list(book_query)
            return JsonResponse({
                'status': 0,
                'msg': '群查 ok',
                'results': book_list
            })
    
        def get(self, request, *args, **kwargs):
            pk = kwargs.get('pk')
            if pk:  # 单查
                return self._single_get(pk)
            else:  # 群查
                return self._many_get()
    
        def post(self, request, *args, **kwargs):
            return JsonResponse({
                'status': 0,
                'msg': 'post ok'
            })
    
        def put(self, request, *args, **kwargs):
            return JsonResponse({
                'status': 0,
                'msg': 'put ok'
            })
    
        def patch(self, request, *args, **kwargs):
            return JsonResponse({
                'status': 0,
                'msg': 'patch ok'
            })
    
        def delete(self, request, *args, **kwargs):
            return JsonResponse({
                'status': 0,
                'msg': 'delete ok'
            })
    Django CBV源码分析
    
    
    
    
  • 相关阅读:
    51 Nod 1086 多重背包问题(单调队列优化)
    51 Nod 1086 多重背包问题(二进制优化)
    51 Nod 1085 01背包问题
    poj 2559 Largest Rectangle(单调栈)
    51 Nod 1089 最长回文子串(Manacher算法)
    51 Nod N的阶乘的长度 (斯特林近似)
    51 Nod 1134 最长递增子序列(经典问题回顾)
    51 Nod 1020 逆序排列
    PCA-主成分分析(Principal components analysis)
    Python中cPickle
  • 原文地址:https://www.cnblogs.com/ludundun/p/12710504.html
Copyright © 2011-2022 走看看