zoukankan      html  css  js  c++  java
  • drf基础

    drf基础

    1 web开发模式

    web开发模式一共有两种:

    1. 前后端混合开发:返回的是html内容,需要写模板。
    2. 前后端分离:只专注于写后端接口,返回json、xml格式数据

    前后端分离可以很好地实现各司其职的效果,有利于提高开发效率,后端只需要写业务逻辑,返回数据给前端,前端拿到数据之后,利用自己的技术来实现页面的渲染。

    # xml格式
    <xml>
        <name>tom</name>
    </xml>
    
    # json格式数据
    {"name":"tom"}
    
    # 基础小知识:各种语言页面返回的后缀
    java==>jsp  # https://www.pearvideo.com/category_loading.jsp
    PHP==>php  # http://www.aa7a.cn/user.php
    python==>html  # http://www.aa7a.cn/user.html
    

    动态页面和静态页面:

    1. 动态页面:指的是页面需要在数据库中查找数据
    2. 静态页面:指页面内容不需要改变,不同数据库交互。

    页面静态化:指的是将动态页面先转化为静态页面展示出来,可以极大地提高程序运行性能,用户都说好。

    2 api接口

    api接口:通过网络,规定了前后端信息交互规则的url连接,可以理解为前后端信息交互的媒介。

    api接口和普通的url连接还是有区别的,web API接口有四大特点:

    1. url:像返回数据的url连接
    2. 请求方式:getpostputpatchdelete
    3. 请求参数:json或xml格式的k-v类型数据
    4. 响应结果:json或xml格式的数据

    3 postman的使用

    postman是目前最好用的,模拟发送http请求的工具

    下载之后双击运行即可。

    一些简单的使用。

    4 RESTful API规范

    4.1 简介

    restful是一种定义web API接口的设计风格,尤其适用于前后端分离的应用模式中。

    理念是认为后端开发任务就是提供数据的,对外提供的是数据资源的访问接口,所以在定义接口时,客户端访问的url路径就表示这种要操作的数据资源。

    事实上,我们可以使用任何一个矿界实现符合restful规范的API接口。

    4.2 10条规范

    # 1 数据的安全保障:url连接一般都采用https协议进行传输,采用https协议可以提高数据交互过程中的安全性。
    
    # 2. 接口特征表现,在url上表现得让人一眼能知道是一个api接口。
        -用api关键字标志url
        -看到api字眼,就代表该请求url连接是完成前后端数据交互的。
        url:https://api.luffycity.com/api/v1/course/free/
    
    # 3、多数据版本共存
        - 在url连接中标识数据版本
        https://api.baidu.com/v1
        https://api.baidu.com/v2
        注:url简介中的v1和v2就是不同数据版本的体现。如果直接进行重改的话,需要进行老版本的显示就会出问题。
    # 4 数据即是资源,均使用名词
        接口一般都是完成前后台数据的交互,交互的数据我们称之为资源
          - https://api.baidu.com/users
          - https://api.baidu.com/books
          - https://api.baidu.com/book
        一般都是提倡使用资源的复数形式,在url连接中不要出现操作资源的动词
        特殊的接口可以出现动词,因为这些接口一般都是没有一个明确的资源,或者动词就是接口 的核心含义。
    
    # 5 资源操作由请求方式决定
        操作资源一般都会涉及到增删改查,我们提供请求方式来标识增删改查动作。
          -https://api.baidu.com/books - get请求:获取所有书
          -https://api.baidu.com/books/1 - get请求:获取主键为1的书
          -https://api.baidu.com/books    post请求:新增一本书
          -https://api.baidu.com/books/1  put请求:整体修改主键为1的书
          -https://api.baidu.com/books/1  patch请求:局部修改主键为1的书
          -https://api.baidu.com/books/1  delete请求:删除主键为1的书
    # 6 过滤,通过在url上传参的形式传递搜索条件
         - https://api.example.com/v1/zoos?limit=10:指定返回记录的数量
    # 7.响应状态码
        2xx 正常响应
            200:常规请求
            201:创建成功
        3xx  重定向响应
            301:永久重定向
            302:暂时重定向
        4xx  客户端异常
            403:请求无权限
            404:请求路径不存在
            405:请求方法不存在
        5xx  服务器异常
            500:服务器异常
    # 8 错误处理,应返回错误信息,error当作key
        {
            error:'报错信息'
        }
    # 9 返回结果,针对不同结果,服务器向用户返回的结果应该符合以下规范
        GET /books/:返回资源对象的列表
        GET /books/id:返回单个资源对象
        POST /books/:返回新生成的资源对象
        PUT /books/id:返回完整的资源对象
        PATCH /books/id:返回完整的资源对象
        DELETE /books/id:返回一个空文档
    
    # 10 需要url请求的资源需要访问资源的请求连接
        API最好做到Hypermedia,返回结果中提供连接,连向其他API方法。
    

    5 drf 安装与使用

    安装: pip install djangorestframework==3.10.3

    # 使用
        1. 在settings.py的app中注册
           rest_framework
        2. 在models.py中写表模型
            class Book(models.Model):
                name = models.CharField(max_length=32)
       3. 新建一个序列化类
        from rest_framework.serializers import ModelSerializer
            from app01.models import  Book
            class BookModelSerializer(ModelSerializer):
                class Meta:
                    model = Book
                    fields = "__all__"
       4. 在视图中写视图类
            from rest_framework.viewsets import ModelViewSet
            from .models import Book
            from .ser import BookModelSerializer
            class BooksViewSet(ModelViewSet):
                queryset = Book.objects.all()
                serializer_class = BookModelSerializer
       5.写路由关系
        from app01 import views
            from rest_framework.routers import DefaultRouter
            router = DefaultRouter()  # 可以处理视图的路由器
            router.register('book', views.BooksViewSet)  # 向路由器中注册视图集
              # 将路由器中的所以路由信息追到到django的路由列表中
            urlpatterns = [
                path('admin/', admin.site.urls),
            ]
            #这是什么意思?两个列表相加
            # router.urls  列表
            urlpatterns += router.urls
        6 启动,在postman中测试即可
               
    
  • 相关阅读:
    Day18:继续添加前端代码
    Day17:今天为前端做的几件小事
    Day16:接口调试完成&紧急转前端开发
    Day25:报告编写等
    Day24:结论的撰写&&openid再次尝试
    Day23:个人小结的撰写&&对coderunner的熟悉
    Day22:数据库导入&分工&准备科研训练
    Day21:尝试脱离相同ip连接
    Day20:update功能的实现
    Day19:代码整合等
  • 原文地址:https://www.cnblogs.com/liqianxin/p/13257513.html
Copyright © 2011-2022 走看看