目录
前后端开发模式
1.前后端结合模式----全栈
后端人员根据前端写好的静态html页面 套用模板语法
存在问题:前端页面嵌入了很多后端代码 一旦后续更换语言 前端可能要重新写 增大成本
2.前后端分离模式
前端:前端人员负责写前端 使用mock数据
后端:后端人员写(API接口) 使用postman接口测试工具测试
前后端数据进行联调项目
2.1 客户端和服务端采用RESTFUL API的交互方式进行交互
2.2 前后端代码库分离
2.3 并行开发
3.前后端分离优点:
提升开发效率
完美应对复杂多变的前端需求
增强代码的可维护性
为优质产品打造精益团队
API接口
1.API接口:通过网络 规定了前后台信息交互规则的url链接(前后台信息交互的媒介)
2.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
1.原因:后端人员将API接口写好后 需要测试 无法在浏览器中进行测试 需要借助测试软件
2.种类:测试软件很有多 如 postman、postwoman、PAW-Mac、PAW、SoapUI、Katalon Studio、JMeter、Karter DSL
3.本质:模拟发送http请求
4.postman官方网址:https://www.postman.com/downloads/
restful规范
1.REST:全称 Representational State Transfer(表征性状态转移) 2000年首次出现在Roy Fielding
2.RESful:定义Web API接口的设计风格 尤其使用于前后端分离的应用模式种
3.RESful规范:
3.1 数据的安全保障:url链接一般采用https协议进行传输(https=http+ssl/tsl(http协议的基础上通过传输加密和身份认证))
3.2 接口中带api关键词
3.3 多数据版本数据共存 一个接口可能有多个版本 url链接中标识版本
如 版本的更新(旧版本也需要存在)
3.4 数据(即资源):均使用名词(可使用复数) 接口尽量使用名词
3.5 资源操作由请求方式决定
获取数据:get请求
删除数据:delete请求
新增数据:post请求
修改数据:put patch请求
注:请求地址一样 通过请求方式决定对资源进行什么操作
3.6 url地址中带过滤参数
3.7 响应状态码
http状态码:
1xx:请求正在处理
100 继续
101 切换协议
2xx:请求 处理成功
200 请求成功
201 已创建
3xx:重定向
301 永久移动
302 临时移动
4xx:客户端错误
403 服务器理解请求 但拒绝(缺携带的标志数据)
404 查询的资源不存在
5xx:服务端错误
500 服务器内部错误
501 服务器不支持请求的功能
网址:http://tools.jb51.net/table/http_status_code
响应体中写状态码:公司规定 如在响应体中写状态码{code:100}
3.8 返回错误信息:响应体中携带错误信息{code:100,msg:成功}
3.9 返回结果 针对不同操作 服务器向用户返回的结果应该符合以下规范
GET/collection:返回资源对象的列表(数组)[{},{}]
GET/collection/resource:返回单个资源对象{}
POST/collection:返回新生成的资源对象{}
PUT/collection/resource:返回完整的资源对象
PATCH/collection/resource:返回完整的资源对象{}
DELETE/collection/resource:返回一个空文档
数据获取类型:获取所有
获取单条
新增数据
修改数据
删除数据
3.10 响应中带链接
序列化和反序列化
1.序列化:我们识别数据转换为指定的格式提供给别人
2.反序列化:将别人提供的数据转化为我们所需的数据格式
djangorestframework快速使用
1.使用django这个web框架 开发前后端分离项目(模板渲染) 写接口
1.1 JsonResponse返回
1.2 djangorestframewor可以快速写出符合的restful规范的接口
2.接口数据处理
2.1 获取所有:get http://127.0.0.1:8000/books
2.2 获取单个:get http://127.0.0.1:8000/books/1
2.3 新增一条:post http://127.0.0.1:8000/books/(最后必须加/)
2.4 修改一条:put/patch http://127.0.0.1:8000/books/1
2.5 删除一条:delete http://127.0.0.1:8000/books/1
3.第三方:安装 pip3 install djangorestframework
4.代码操作:books表数据的增删改查
urls.py
from django.urls import path
from app01 import views
from rest_framework.routers import SimpleRouter
router = SimpleRouter()
router.register('books', views.BookView)
urlpatterns = [
path('admin/', admin.site.urls),
]
urlpatterns += router.urls
views.py
from app01 import models
from rest_framework.viewsets import ModelViewSet
from app01 import serializer
class BookView(ModelViewSet):
queryset = models.Books.objects.all()
serializer_class = serializer.BookSerializer
models.py
from django.db import models
class Books(models.Model):
name = models.CharField(max_length=32)
price = models.CharField(max_length=32)
publish = models.CharField(max_length=32)
serializers.py
from rest_framework import serializers
from app01 import models
class BookSerializer(serializers.ModelSerializer):
class Meta:
model = models.Books
fields = '__all__'
cbv源码分析
1.路由匹配:
第一个参数:路径
第二个参数:视图函数的内存地址(执行as_view类方法 执行完后是函数的内存地址)
urlpatterns = [
path('test/', views.TestView.as_view())
]
2.写基于类的视图(cbv):
from django.views import View
class TestView(View):
def get(self, request):
return HttpResponse('1234')
3.查找类的as_view方法
先从TestView类中查找 无
从继承的父类View中查找(as_view是绑定给类的方法)
@classonlymethod
def as_view(cls, **initkwargs):
def view(request, *args, **kwargs):
return self.dispatch(request, *args, **kwargs)
return view
4.发送请求 路由匹配成功 执行view(request)
执行dispatch方法
先从TestView类中查找 无
从继承的父类View中查找(dispatch方法)
def dispatch(self, request, *args, **kwargs):
if request.method.lower() in self.http_method_names:
handler = getattr(self, request.method.lower(), self.http_method_not_allowed)
else:
handler = self.http_method_not_allowed
return handler(request, *args, **kwargs)
5.request.method.lower()获取请求类型转换为小写 再判断在不在请求类型的数据中
通过反射getattr方法获取
根据请求类型 查找方法 执行
如get请求
class TestView(View):
def get(self, request):
return HttpResponse('1234')
标签:01,http,请求,models,request,接口,import,djangorestframewor,drf
From: https://www.cnblogs.com/040714zq/p/16723900.html