前后端开发模式
前后端混合
使用模板语法在后端渲染前端页面
模版语法: dtl:djagno template language
-
优缺点:
- 优点:一个人就能完成
- 缺点:只能用于浏览器网页使用
前后端分离
通过API接口将前后端分离的连接起来
-
API接口
-
1.有URI
2.请求方式:get,post,delete
3.请求参数
4.返回格式:json
优缺点
- 优点:后端人员不用写前端,多种前端都兼容,如:小程序、app
- 缺点:人员消耗增加
restful规范
restful规范是什么,如何来的?
一种定义Web API接口的设计风格,尤其适用于前后端分离的应用模式中 的规范
Roy Fielding的博士论文提出的
我们以后接口都要遵循一个规范,restful规范,以下十条
-
数据的安全保障
url链接一般都采用htrps协议传输,它比http安全 -
接口特征表现
url中带api标识,如:
-https://api.baidu.com/books/
-https://www.baidu.com/api/books/ -
多数据版本共存
url中版本信息,如:
https://api.baidu.com/v1/books
https://www.baidu.com/api/v2/books -
数据即是资源,均使用名词(可复数)
前后台交互,交互的数据称之为资源
数据即资源,前后端交互的数据称之为资源,url尽量使用名字,如:
https://127.0.0.1/api/v1/books/ -->表示对图书操作:增加,删除,查询,修改,都用这一个地址
不符合规范的:
https://127.0.0.1/api/v1/get_all_books/
https://127.0.0.1/api/v1/delete_books/ -
资源操作由请求方式决定
1.get 请求获取数据(获取所有,获取单条)
2.post 新增数据
3.delete 删除数据
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 - delete请求:删除主键为1的书 -
请求地址中带过滤条件
只针对于搜索所有接口 -
响应状态码(两层)
http响应状态码:
1xx:表示请求正在处理,前端一般看不到
2xx:表示请求处理成功
3xx:重定向
4xx:客户端错误
5xx:服务端出错
成功都返回200,而在响应体中带状态码,不同的公司code就不一样 -
响应体中带错误信息
{
“code”: 101,
“msg”: “用户名或密码错误”
} -
不同操作,返回格式符合如下标准
规定:
GET /collection:返回资源对象的列表(数组)
- [{name:西游记,price:19},{name:三国,price:19}]
GET /collection/resource:返回单个资源对象
- {name:三国,price:19}
POST /collection:返回新生成的资源对象
- {name:三国,price:19}
PUT /collection/resource:返回完整的资源对象
- {name:三国演绎,price:19}
DELETE /collection/resource:返回一个空文档
一般这样做:
{
code:100
msg:查询成功
restult:规定的
} -
响应中带链接
序列化与反序列化
序列化: 数据转换格式
序列化反两个阶段:
序列化:把我们识别的数据转换成指定的格式提供给别人
例如:我们在django中获取到的数据默认是模型对象,但是模型对象数据无法直接提供给前端或别的平台使用,所以我们需要把数据进行序列化,变成字符串或者json数据,提供给别人。
反序列化:把别人提供的数据转换/还原成我们需要的格式
例如:我们在django中获取到的数据默认是模型对象,但是模型对象数据无法直接提供给前端或别的平台使用,所以我们需要把数据进行序列化,变成字符串或者json数据,提供给别人。
drf安装
drf是一个模块,安装模块djangorestframework
安装模块
- django是2版本,用不了drf最新(适当)降版本,他会卸载django,然后装最新4.x
- django版本为3.x时就可以使用最新drf
在配置文件中APP注册
INSTALLED_APPS =[
'rest_framework',
]
drf的使用
-
写路由
在url.py文件中from rest_framework.routers import SimpleRouter router = SimpleRouter() router.register('books', BookView, 'books')
然后在
urlpatterns
下urlpatterns += router.urls
-
写视图类
from rest_framework.viewsets import ModelViewSet from .serializer import BookSerializer class BookView(ModelViewSet): queryset = Book.objects.all() serializer_class = BookSerializer
-
序列化类
需要在应用里面新建一个py文件,serializer.py
from rest_framework import serializers from .models import Book class BookSerializer(serializers.ModelSerializer): class Meta: model = Book fields = "__all__"