前后端开发模式
目前前后端分离越来越流行,这种模式使开发分工更加明确术业有专攻能更好的完成自己所开发的需求让我们看看前后端具体分别干了什么事:
前后端分离优缺点
优点:
为优质产品打造精益团队
提升开发效率
专业的前端能够完成复杂多变的前端需求
代码维护性强
缺点:
增加了大量的沟通成本,调试成本
前后端开发进度相互影响大大降低了开发效率
API接口
什么是API接口
APL(Application Programming Interface),就是应用程序接口在项目开发中是必要的组成部分之一,当前后端在联动调试的时候需要通过接口来请求数据与响应数据从而形成一个完整的程序
API接口的用法
url:返回数据的url http://127.0.0.1:8000/api/v1/login 请求方式:get、post、patch、delete 请求参数:json或xml格式的key-value类型数据 响应结果: 返回json或xml格式的key-value类型数据
接口测试工具postman
API接口写好后后端人员要先自己测试但是还不能通过浏览器来测试所以需要借助到一些接口测试的工具:postman、postwoman
接口测试工具其本质就是模拟客户端发送http请求
postman官方下载:Download Postman | Get Started for Free
1.postman界面
2.数据格式
restful规范
什么是restful规范
REST全称(Representional State Transfer),中文意思是表述:表征性状态转移首次出现在2000年 Roy Fielding 的博士论文中,REST与技术无关代表的是一种软件架构风格,尤其适用于前后端分离的应用模式中
restful规范10点
APL与用户的通信协议,总是使用 HTTPS协议
https:http+ssl/tsl
接口中带api关键字
http://127.0.0.1:8000/api/v1/register
多数据版本共存,一个接口可能有多个版本链接中带版本标识
http://127.0.0.1:8000/api/v1/register ----> v1
数据即资源均使用名词(可用复数) 接口尽量使用名词
使用名词后无法区分增、删、改、查
资源操作由请求方式决定
获取数据:get请求
新增数据:post请求
删除数据:delete请求
修改数据:put、path请求
请求地址一样通过不同的请求方式决定对资源进行什么操作
url地址中带过滤器
获取所有的书籍数据
http://127.0.0.1:8000/api/v1/book
获取科技类的书籍
http://127.0.0.1:8000/api/v1/book?type=科技类
响应带状态码
1xx:表示请求正在处理一般看不到
2xx:表示请求处理成功
200与201的区别:200表示请求已成功,202表示请求成功并且服务器创建了新的资源
3xx:网页重定向
302与301的区别:302临时重定向到不同的URL响应请求,301则是永久重定向到不同的地址
4xx:客户端错误
403与404的区别:403服务器拒绝请求,404请求的数据在服务器上未找到
5xx:服务端内部错误
503:当前服务端无法使用
505:服务器不支持请求中使用的HTTP协议版本
ps:一般公司有自己的规范在响应体中写状态码 {code:100}
在响应体中带错误信息返回错误信息
{code:100}
返回结果针对不同的操作,服务器向用户返回的结果要符合下面规范
GET /collection:返回资源对象的列表 (数组)[{},{}]
GET /collection/resource:返回单个资源对象 {}
POST /collection:返回新生成单资源对象 {}
PUT /collection/resource:返回完整的资源对象 {}
PATCH /collection/resource:返回完整的资源对象 {}
DELETE /collection/resource:返回一个空文档
响应中带链接
响应返回数据中也可能带有图片等地址链接
序列化和反序列化
在API接口开发中最核心最常见的一个过程就是序列化所谓序列化就是把数据转换成不同的数据格式:
序列化:把我们能识别的数据转换成指定的数据格式传输给别人
我们在django中获取的数据默认是模型对象(queryset),但是模型对象数据无法直接提供给前端或别的平台使用,所以我们需要把数据序列化成能够识别的json数据提供给前端
反序列化:把别人提供的数据转换成我们需要的格式
django序列化好的json数据传输过来在前端反序列成自己可以识别的数据
ps:各个语言间的数据无法直接传输需要借助json这种通用的数据格式来进行传输当然序列化格式不只有json格式还有XML等
djangorestframework快速使用
什么是drf
djangorestframework简称(drf),drf框架是基于Django框架,用于快速构建Web RESTful API的工具提供了定义序列化器Serializer的方法,可以快速根据Django ORM 或者其他库自动序列化、反序列化
使用dif前得先安装模块:pip install djangorestframework
五个接口获取数据
get:获取所有/通过筛选器可以获取单个
post:新增一个
put/path:修改一条
delete:删除一条
drf使用方式
例如:创建书籍表通过drf框架来写获取表中信息借口
'''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)
'''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
'''新建一个serializer.py ''' from rest_framework import serializers from .models import Book class BookSerializer(serializers.ModelSerializer): class Meta: model = Book fields = '__all__'
ps:创建完后通过postman测试接口获取数据
CBV源码分析
提前准备:
'''在视图层中写好cbv''' from django.views import View class TestView(View): def get(self,request): return HttpResponse('get') def post(self,request): return HttpResponse('post') '''在路由层中调用''' path('test/',views.TestView.as_view())
通过路由可以看出与FBV多了一个as_view()方法所以我们需要研究的也是这个方法
ps:最后的结果就是get(request)而我们在CBV类中也定义好了get方法所以会自动运行get