DRF-(1)

内容概览

  • 前后端开发模式
  • API接口
  • 接口测试工具postman
  • restful规范
  • 序列化与反序列化
  • djangorestframework快速使用
  • CBV源码分析

前后端开发模式

  • 前后端混合开发
    在后端通过前端写好的html页面,使用模板语法渲染出页面然后返回给前端展示
  • 前后端分离开发
    前端先请求到静态页面,需要数据向后端发送请求,后端将前端需要的数据返回(json/xml);
    前端只负责写前端,写的过程中使用mock数据。后端只负责写后端(API接口),使用接口测试工具测试(postman)
    最后前后端联调项目

API接口

API(Application Programming Interface)开发接口标准之一:通过网络,规定了前后台信息交互规则的url链接,也就是前后台信息交互的媒介

  • API接口的样子:
    • url:长得像返回数据的url链接
      https://api.map.baidu.com/place/v2/search
    • 请求方式:get、post、put、patch、delete
      采用get方式请求上方接口
    • 请求参数:json或xml格式的key-value类型数据
      ak:6E823f587c95f0148c19993539b99295
      region:上海
      query:肯德基
      output:json
    • 响应结果:json或xml格式的数据

接口测试工具postman

后端写完接口后,不可能在浏览器中测试,需要使用测试软件来做接口测试
实际上就是模拟发送http请求
在这里插入图片描述

restful规范

REST全称是Representational State Transfer,中文意思是表述:表征性状态转移
RESTful是一种定义Web API接口的设计风格,尤其适用于前后端分离的应用模式中
restful的规范有十条:

  1. 数据的安全保障:url链接一般采用HTTPS协议传输
  2. 接口中带有api关键字
  3. 多版本数据共存,一个接口可能有多个版本,在url中携带版本标识
  4. 数据既资源,均使用名词(可以使用复数)
  5. 相同的地址,资源的操作方式由请求方式决定
    get:获取数据
    post:新增数据
    delet:删除数据
    put/patch:修改数据
  6. url地址中带过滤参数
    获取书店中所有书籍:127.0.0.1/api/v1/books
    获取书店中所有教材类书籍:127.0.0.1/api/v1/books?type=textbook
  7. 响应带状态码,在响应体中携带状态码,通过数字来代表一段信息
    http状态码:
     1xx:请求正在处理
     2xx:请求处理成功
     3xx:重定向
     4xx:客户端错误
     5xx:服务端错误
    公司可能会有自己规定的响应状态码
  8. 返回错误信息,在响应体中携带错误信息
  9. 返回结果,针对不同操作,服务器向用户返回的结果应该符合一下规范(现在一般不会完全符合该规范)
    GET /collection:返回资源对象的列表(数组)[{},{}]
    GET /collection/resource:返回单个资源对象 {}
    POST /collection:返回新生成的资源对象 {}
    PUT /collection/resource:返回完整的资源对象 {}
    PATCH /collection/resource:返回完整的资源对象 {}
    DELETE /collection/resource:返回一个空文档
  10. 响应中带链接

序列化和反序列化

api接口开发,最核心最常见的一个过程就是序列化,所谓序列化就是把数据转换格式
序列化:将我们能够识别的数据转换成其他语言能够识别的数据格式提供
反序列化:将别人序列化过后的的数据转换成我们所需要的格式

djangorestframework快速使用

  • 使用django框架,开发前后端分离项目:
    原生django,使用JsonResponse返回数据即可
    使用djangorestframework可以快速的写出符合restful规范的接口

  • 接口总共就只有5个以及这5个的变形
    获取所有:get
    获取单个:get
    新增一个:post
    修改一个:put/patch
    删除一个:delete

  • 对于book表,使用drf快速实现这5个接口
    先安装drf:pip install Djangorestframework

urls.py

from django.contrib import admin
from django.urls import path
from rest_framework.routers import SimpleRouter
from app01 import views

router = SimpleRouter()
router.register('books', views.BookView)
urlpatterns = [
    path('admin/', admin.site.urls),
]
urlpatterns += router.urls

views.py

from .models import Book
from rest_framework.viewsets import ModelViewSet
from .serializer import BookSerializer


class BookView(ModelViewSet):
    queryset = Book.objects.all()
    serializer_class = BookSerializer

models.py

from django.db import models


class Book(models.Model):
    name = models.CharField(max_length=32)
    price = models.CharField(max_length=32)
    publish = models.CharField(max_length=32)

serializer.py

from rest_framework import serializers
from .models import Book


class BookSerializer(serializers.ModelSerializer):
    class Meta:
        model = Book
        fields = '__all__'

通过postman测试

CBV源码分析

"""cbv写好后,在路由中配置"""
path('test/', views.TestView.as_view())
"""会先执行as_view这个方法,按照查找顺序一层层查找该方法"""
@classonlymethod
	def as_view(cls, **initkwargs):
		def view(request, *args, **kwargs):
		    return self.dispatch(request, *args, **kwargs)
		return view
"""在父类中找到as_view方法,方法中定义了一个函数并返回,在路由匹配成功后执行此函数"""
"""在View中找到dispatch方法"""
def dispatch(self, request, *args, **kwargs):
    if request.method.lower() in self.http_method_names:  # 将请求方式转成小写,判断是否在后者的列表中;
    """http_method_names = [
    "get","post","put","patch",
    "delete","head","options","trace",
    ]"""
        handler = getattr(self, request.method.lower(), self.http_method_not_allowed)  # 通过反射获取到请求方式对应的方法
    else:
        handler = self.http_method_not_allowed
    return handler(request, *args, **kwargs)  # 返回该方法的返回值
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值