drf介绍
1 前后端开发模式
# 补充: xadmin :前端的后台管理模板:layui+jquery 国人 贤心 admin-lte:前端后台管理模板:bootstrap+jquery 老外 # 前后端混合开发-----》模板,使用模板语法渲染模板 -图书管理系统 -bbs项目 -后端人员要通过前端写好的html页面,套模板语法 # 前后端分离 -后面的项目 -后端任人员只负责写接口(API接口),使用postman接口测试工具测试 -前端人员负责写前端,写的过程中使用mock数据 -最后:前后端联调项目
2 API接口
# 通过网络,规定了前后台信息交互规则的url链接,也就是前后台信息交互的媒介
# 之前写的点赞点踩接口其实就是一个api接口 # 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格式的数据 -响应结果:json或xml格式的数据
3 接口测试工具postman
# API接口写好,后端人员要测试,不可能在浏览器里测试
# 使用postman软件,来做接口测试 -本质就是:模拟发送http请求 # 接口测试软件有很多,postwoman # 官网下载:https://www.postman.com/downloads/ # 双击安装
4 restful规范
# REST全称是Representational State Transfer,中文意思是表述:表征性状态转移, 它首次出现在2000年Roy Fielding的博士论文中
# RESTful是一种定义Web API接口的设计风格,尤其适用于前后端分离的应用模式中 # restful规范有10点---》规范,公司有自己的风格规范 -1 数据的安全保障:url链接一般都采用https协议进行传输 --->为了保证数据安全使用https协议传输 -https是什么:http+ssl/tsl -2 接口中带api关键词 -3 多数据版本共存,一个接口可能有多个版本---》url链接中标识版本标识 -假设咱们有个登录接口:开始只要用户名和密码 后来用户名,密码,验证码 -4 数据即是资源,均使用名词(可用复数)---》接口尽量使用名词 -都是用名词,没法区分是增加,删除,修改,查询 -5 资源操作由请求方式决定 -获取数据:get请求 -删除数据:delete请求 -新增数据:post请求 -修改数据:put,patch请求 -请求地址一样,通过请求方式决定对资源进行什么操作 -6 url地址中带过滤参数 -获取动物园所有动物 127.0.0.1/api/v1/animals --->get请求 -获取动物园所有哺乳类动物 127.0.0.1/api/v1/animals?type=哺乳类 --->get请求 -7 响应带状态码 -http状态码:http://tools.jb51.net/table/http_status_code -1xx:表示请求正在处理,一般看不到 -2xx: 表示请求处理成功, 有很多 200,201 -3xx: 重定向 302 301 -4xx: 客户端错误 403 404 -5xx :服务端错误 -响应体中写状态码:咱们公司里有规范,在响应体中写状态码 {code:100} -8 返回错误信息--->响应体中带错误信息 {code:100,msg:成功} -9 返回结果,针对不同操作,服务器向用户返回的结果应该符合以下规范 GET /collection:返回资源对象的列表(数组)[{},{}] GET /collection/resource:返回单个资源对象 {} POST /collection:返回新生成的资源对象 {} PUT /collection/resource:返回完整的资源对象 {} PATCH /collection/resource:返回完整的资源对象 {} DELETE /collection/resource:返回一个空文档 -获取所有:{code:100,msg:成功,data:[{name:水浒传,price:99},{name:西游记,price:88}]} -获取单条:{code:100,msg:成功,data:{name:水浒传,price:99}} -新增数据:{code:100,msg:新增成功,data:{name:西游记,price:99}} -修改数据:{code:100,msg:修改成功,data:{name:西游记v2版本,price:99}} -删除数据:{code:100,msg:删除成功} -10 响应中带链接
5 序列化和反序列化
# api接口开发,最核心最常见的一个过程就是序列化,所谓序列化就是把数据转换格式,序列化可以分两个阶段:
-序列化: 把我们识别的数据转换成指定的格式提供给别人 -例如:我们在django中获取到的数据默认是模型对象(queryset),但是模型对象数据无法直接提供给前端或别的平台使用,所以我们需要把数据进行序列化,变成字符串或者json数据,提供给别人。 -反序列化:把别人提供的数据转换/还原成我们需要的格式
6 djangorestframework快速使用
# 使用django这个web框架,开发前后端分离项目(模板渲染),只写接口
-使用JsonResponse返回即可---》原生django -djangorestframework方便咱们快速写出符合restful规范的接口 # 写接口:总共就5个及这5个的变形 -获取所有 get -获取单个 get -新增一条 post -修改一条 put/patch -删除一条 delete # 对于book表,快速实现这5个接口---》不需要你会 -使用drf有多块 -安装drf:pip3 install djangorestframework
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
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)
serializer.py
from rest_framework import serializers
from .models import Book class BookSerializer(serializers.ModelSerializer): class Meta: model = Book fields = '__all__'
通过postman测试
7 cbv源码分析
# 以后都写cbv,都写基于类的试图
# cbv写好后,路由配置如下 -第一个参数是路径,第二个参数是试图函数的内存地址(视图类执行as_view这个类方法,把它执行完,结果放在第二个参数上:我们猜执行完的结果是个函数内存地址) path('test/', views.TestView.as_view()), -去找as_view,去TestView类中找,找不到,没有,去父类中找View @classonlymethod def as_view(cls, **initkwargs): def view(request, *args, **kwargs): return self.dispatch(request, *args, **kwargs) return view -当请求来了,路由匹配成功,会执行view(request)--->本质执行self.dispatch(request, *args, **kwargs) -去View中找到了dispatch def dispatch(self, request, *args, **kwargs): # 请求方式转成小写,假设 get 请求,符合if条件 if request.method.lower() in self.http_method_names: # 反射 getattr(对象,'字符串','默认值') # self是TestView的对象 # handler 就是TestView类的get方法 handler = getattr(self, 'get', self.http_method_not_allowed) else: handler = self.http_method_not_allowed return handler(request, *args, **kwargs) # get(request)
__EOF__

本文作者:夏の嵐
本文链接:https://www.cnblogs.com/xzljm/p/16732559.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/xzljm/p/16732559.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!