内容概览

前后端开发模式API接口接口测试工具postmanrestful规范序列化与反序列化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的规范有十条:

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

序列化和反序列化

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) # 返回该方法的返回值

好文阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: