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中测试即可
           
原文地址:https://www.cnblogs.com/liqianxin/p/13257513.html