restful规范、序列化反序列化、drf介绍和快速使用、CBV源码分析

restful规范

概念:

​ restful是一种定义web API接口的风格 适用于前后端分离

规范:

​ 1.数据的安全保障 通常使用https (http+ssl/tsl)协议

​ url链接一般采用https协议进行传输

​ 采用http协议 可以提高数据交互过程中的安全性

​ 如果被拦截 是无法被解密的

​ 2.接口中带api标识

​ 方式一:https://api.joyce.com/books

​ 方式二:https://www.joyce.com/api/books

​ 3.多版本共存 路径中带版本信息

​ https://api.joyce.com/v1/login

https://www.joyce.com/api/v2/login

​ 4.数据即是资源 均使用名词 尽量不出现动词(核心)

​ 接口一般都是完成前后端数据交互 交互的数据我们政治为资源

​ 接口形式一般是:https://api.joyce.com/books

​ 特殊接口可以出现动词 因为这些接口一般没有一个明确的资源 或者动词就是这个接口的核心含义:https://api.joyce.com/v1/login

​ 5.资源操作由请求方式决定(method)

​ 操作资源一般都会涉及到增删改查 我们提供请求方式来标识在增删改查的动作

​ 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的书

​ 6.在请求地址中带过滤条件

​ https://api.baidu.com/books?name=哈哈哈&price=6

​ 7.响应状态码:(两套)

​ http响应状态码:1xx:请求正在处理

​ 2xx:成功响应

​ 3xx:重定向(301 临时重定向 302 永久重定向)

​ 4xx:客户端错误(403 没有权限 404 资源不存在)

​ 5xx:服务端错误

​ 公司内部规定的响应状态码 放在响应体中:

​ {code:1000}

​ 8.返回数据中带错误信息

​ {

​ code:0

​ msg/error:'ok/用户名错误'

​ }

​ 9.返回的结果应该符合一下规范

GET获取所有数据 返回资源对象列表 [{"name":"红楼梦","price":6},{"name":"西游记","price":66}]
GET获取单个对象数据 返回单个资源对象 .{"name":"红楼梦","price":6}.
POST新增对象 返回新生成的对象 .{"name":"三国演义","price":666}.
PUT修改对象 返回修改后的对象 .{"name":"红楼梦","price":678}.
DELETE删除对象 返回空 {}

​ 10.响应数据中带链接

​ 即返回结果中提供链接,连向其他API方法,使得用户不查文档,也知道下一步应该做什么。

序列化反序列化

API接口开发 最核心最常见的一个过程激素hi序列化 所谓序列化就是把数据转换格式

序列化(read):

把我们识别的数据转换成指定的格式提供给别人

​ 字典、列表 转成json格式存到文件中

​ eg:我们在django中获取到的数据默认是jqurey对象 但是前端无法直接使用 所以哦我们需要把数据进行序列化 转成前端可以读懂的格式 变成字符串或者json格式的数据

反序列化(write):

把别人提供的数据转换/还原成我们需要的格式

​ eg:前端js提供的json数据 对于python来说就是一些字符串 我们需要进行反序列化化成模型类对象 这样我们才能把数据保存到数据库中

基于django原生编写5个接口

#以后的接口都是基于这5个接口变形
        查询所有
        查询单个
        新增一个
        修改一个
        删除一个

#基于books单表为例 写5个接口
		创建book表
    	表迁移
        录入数据
        写查询接口 遵循restful规范 使用cbv GET
        新增一个数据 POST
        查询一个 转换器 
        修改数据 :put提交不能从request.POST中取 前端使用json格式提交 在request.body里取数据
        
        

drf介绍和快速使用

# djangorestframework:  drf 帮助我们快速的实现符合restful规范的接口

# django 最新 4.x ,一般都会用最新版的上一版3.x
# drf最新支持到djagno 3.x ,最新不支持2.x
# 安装drf
	pip3 install djangorestframework -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com/simple/
    # 由于你是django2.x 它发现它不支持,它会自动写在dajgno,安装最新的django 4.x
    
    
    
# 使用drf编写5个接口(听个响)

# views中
from .serializer import BookSerializer
from rest_framework.viewsets import ModelViewSet
class BookView(ModelViewSet):
    queryset = Book.objects.all()
    serializer_class = BookSerializer

# serializer
from rest_framework import serializers
from .models import Book
class BookSerializer(serializers.ModelSerializer):
    class Meta:
        model = Book
        fields = '__all__'
        
# urls中
from rest_framework.routers import SimpleRouter
router = SimpleRouter()
router.register('books', views.BookView, 'books')

urlpatterns = [
    path('admin/', admin.site.urls),
]
# 两个列表相加  [1,2,4] +  [6,7,8]=
urlpatterns += router.urls

CBV源码分析

路由中写的:path('api/v1/books/', views.BookView.as_view()),第二个参数无论是CBV还是FBV放的都是函数的内存地址
		当请求来了 匹配成功后会执行 views.BookView.as_view()(request)
    	views.BookView.as_view()执行的结果是View的类的方法as_view返回的结果是内层函数view 是个内层函数地址
        本质请求来了 匹配成功 会执行view(request)
        def view(request, *args, **kwargs):
            return self.dispatch(request, *args, **kwargs)

        -self.dispatch  View类的方法
        def dispatch(self, request, *args, **kwargs):
            # request.method请求方式转成小写,必须在列表中才能往下走
            if request.method.lower() in self.http_method_names: 
                #反射 去self【】视图类的对象:BookView】,去通过get/post字符串反射出属性或方法
                #handler就是 BookView的get/post方法
                handler = getattr(self, request.method.lower(), 	self.http_method_not_allowed)
            else:
                handler = self.http_method_not_allowed
            # BookView的get方法,加括号,传入request
            return handler(request, *args, **kwargs)
posted @ 2023-01-31 20:27  李李大冒险  阅读(112)  评论(0编辑  收藏  举报
  1. 1 不可撤销
  2. 2 小年兽 程嘉敏
  3. 3 迷人的危险3 FAFA
  4. 4 山楂树之恋 程佳佳
  5. 5 summertime cinnamons / evening cinema
  6. 6 不谓侠(Cover 萧忆情Alex) CRITTY
  7. 7 神武醉相思(翻自 优我女团) 双笙(陈元汐)
  8. 8 空山新雨后 音阙诗听 / 锦零
  9. 9 Wonderful U (Demo Version) AGA
  10. 10 广寒宫 丸子呦
  11. 11 陪我看日出 回音哥
  12. 12 春夏秋冬的你 王宇良
  13. 13 世界が终わるまでは… WANDS
  14. 14 多想在平庸的生活拥抱你 隔壁老樊
  15. 15 千禧 徐秉龙
  16. 16 我的一个道姑朋友 双笙(陈元汐)
  17. 17 大鱼 (Cover 周深) 双笙(陈元汐)
  18. 18 霜雪千年(Cover 洛天依 / 乐正绫) 双笙(陈元汐) / 封茗囧菌
  19. 19 云烟成雨(翻自 房东的猫) 周玥
  20. 20 情深深雨濛濛 杨胖雨
  21. 21 Five Hundred Miles Justin Timberlake / Carey Mulligan / Stark Sands
  22. 22 斑马斑马 房东的猫
  23. 23 See You Again Wiz Khalifa / Charlie Puth
  24. 24 Faded Alan Walker
  25. 25 Natural J.Fla
  26. 26 New Soul Vox Angeli
  27. 27 ハレハレヤ(朗朗晴天)(翻自 v flower) 猫瑾
  28. 28 像鱼 王贰浪
  29. 29 Bye Bye Bye Lovestoned
  30. 30 Blame You 眠 / Lopu$
  31. 31 Believer J.Fla
  32. 32 书信 戴羽彤
  33. 33 柴 鱼 の c a l l i n g【已售】 幸子小姐拜托了
  34. 34 夜空中最亮的星(翻自 逃跑计划) 戴羽彤
  35. 35 慢慢喜欢你 LIve版 戴羽彤
  36. 36 病变 戴羽彤
  37. 37 那女孩对我说 (完整版) Uu
  38. 38 绿色 陈雪凝
  39. 39 月牙湾 LIve版 戴羽彤
像鱼 - 王贰浪
00:00 / 04:45
An audio error has occurred, player will skip forward in 2 seconds.

作词 : 周有才

作曲 : 周有才

这是一首简单的歌

没有什么独特

试着代入我的心事

它那么幼稚

像个顽皮的孩子

多么可笑的心事

只剩我还在坚持

谁能看透我的眼睛

让我能够不再失明

我要记住你的样子

像鱼记住水的拥抱

像云在天空中停靠

夜晚的来到

也不会忘了阳光的温暖

我要忘了你的样子

像鱼忘了海的味道

放下所有梦和烦恼

却放不下回忆的乞讨

多么可笑的心事

只剩我还在坚持

谁能看透我的眼睛

让我能够不再失明

记住你的样子

像鱼记住水的拥抱

像云在天空中停靠

夜晚的来到

也不会忘了阳光的温暖

我要忘了你的样子

像鱼忘了海的味道

放下所有梦和烦恼

却放不下回忆的乞讨

只剩自己就好