• 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源码分析
    
    
    
    
  • 相关阅读:
    Codeforces441B_Valera and Fruits(暴力)
    《Python核心编程》第五章:数字
    app-framework学习--Scroller
    饿了么移动APP的架构演进
    移动支付--银联,支付宝,微信(android)
    android推送,极光推送
    Flume 1.7 源代码分析(四)从Source写数据到Channel
    <html>
    软件系统演示脚本实践(草稿)
    mmu介绍
  • 原文地址:https://www.cnblogs.com/ludundun/p/12710504.html
Copyright © 2020-2023  润新知