drf前戏与介绍
rf前期准备
web开发模式
- 前后端混合开发:模板渲染在后端完成
- 前后端分离:后端只负责写接口,前端来调用,通行使用json格式,多端(web,app)可以使用同一个接口
API接口
为了在团队内部形成共识、防止个人习惯差异引起的混乱,我们需要找到一种大家都觉得很好的接口实现规范,而且这种规范能够让后端写的接口,用途一目了然,减少双方之间的合作成本。
通过网络,规定了前后台信息交互规则的url链接,也就是前后台信息交互的媒介
详细可以查看微博开放平台:https://open.weibo.com/wiki/2/users/show
restful规范
写接口的规范,大部分的接口都会按照这个规范去写(web API接口的设计风格)它首次出现在2000年Roy Fielding的博士论文中,一共10点
-
使用https协议进行数据传输(保证数据安全)
-
URL中带关键字api
https://api.baidu.com https://www.baidu.com/api -
URL中带版本信息
-
数据即是资源,均使用名词
https://api.baidu.com/users https://api.baidu.com/books https://api.baidu.com/book -
资源操作由请求方式决定
-查询操作---get -新增操作----post -修改操作----put,patch -删除操作----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 - patch请求:局部修改主键为1的书 https://api.baidu.com/books/1 - delete请求:删除主键为1的书 -
请求URL中带搜索筛选条件
https://api.example.com/v1/zoos?limit=10:指定返回记录的数量 https://api.example.com/v1/zoos?offset=10:指定返回记录的开始位置、 https://api.example.com/v1/zoos?animal_type_id=1:指定筛选条件 -
响应中要带上状态码
{
status:200
} -
响应中带上错误信息
{ status:200 msg: "无权限操作" } -
针对不同操作返回结果的格式符合一定规范
# 大概率都没有遵循 GET /collection:返回资源对象的列表(数组) GET /collection/resource:返回单个资源对象 POST /collection:返回新生成的资源对象 PUT /collection/resource:返回完整的资源对象 PATCH /collection/resource:返回完整的资源对象 DELETE /collection/resource:返回一个空文档 -
返回的数据中带URL地址
{ "status": 0, "msg": "ok", "results":[ { "name":"肯德基(罗餐厅)", "img": "https://image.baidu.com/kfc/001.png" } ] }
序列化
序列化: 把我们识别的数据转换成指定的格式提供给别人
反序列化:把别人提供的数据转换/还原成我们需要的格式
例如:前端js提供过来的json数据,对于python而言就是字符串,我们需要进行反序列化换成模型类对象,这样我们才能把数据保存到数据库中。
介绍安装drf
在使用drf是一定要记得注册 rest_framework 这个应用!!!!!
# Django Rest_Framework:是django的一个app,可以借助它快速在django框架开发出符合restful规范的接口
# 提供了:REST framework还提供了认证、权限、限流、过滤、分页、接口文档等功能支持
# 官方文档:https://www.django-rest-framework.org/
# github: https://github.com/encode/django-rest-framework/tree/master
# python django的版本支持情况
Python(3.5、3.6、3.7、3.8、3.9)
Django (2.2, 3.0, 3.1) 2.x用的多,1.x老项目
django:1.x跟2.x没有大的区别
3.x:支持异步,并不好,有人用3.x还是在写同步代码
#安装
pip3 install djangorestframework
# 注意:跟django版本对应好,django 2.2.2 drf最新
基于drf的5个接口
# 1 路由层
from rest_framework.routers import SimpleRouter
from app01 import views
router = SimpleRouter()
router.register('book', views.BookView)
urlpatterns = [
# path('admin/', admin.site.urls),
]
urlpatterns += router.urls
# 2 视图层
from rest_framework.viewsets import ModelViewSet
from .serizlizer import BookSerializer
from .models import Books
class BookView(ModelViewSet):
queryset = Books.objects.all()
serializer_class = BookSerializer
# 3 模型层
class Books(models.Model):
name=models.CharField(max_length=32)
price=models.IntegerField()
publish=models.CharField(max_length=32)
# 4 序列化类,新建serializer.py
from rest_framework.serializers import ModelSerializer
from .models import Books
class BookSerializer(ModelSerializer):
class Meta:
model=Books
fields='__all__'

浙公网安备 33010602011771号