首页 > 其他分享 >前后端分离 drf之一

前后端分离 drf之一

时间:2022-09-23 19:33:05浏览次数:89  
标签:前后 请求 models 分离 接口 API import drf view

API接口

前后端分离的开发模式:
客户端和服务端采用restful API的交互方式进行交互
前后端代码库分离,前端代码可以进行mock测试
能够独立开发和测试
后端则用postman接口测试软件测试,以保证API的可用性 降低集成风险

前后端分离

API接口 类似于view函数 连接前端和url的
通过网络 规定了前后端信息交互规则的链接 也是前后端信息交互的媒介

API接口的样子:
-url :
    https://api.map.baidu.com/place/v2/search
-请求方式:
   post,get,put,patch,delete
-请求参数:json或者xml的格式的key:value类型数据
     ak:
     region:
     query:
     otuput:json
-响应结果:json或者xml格式的数据 # 现在一般是使用json格式

restful规范

# RESTful是一种定义web API接口的 设计风格 尤其适用前后端分离的应用模式中
规范有10点:
1.数据的安全保障:url链接一般都采用https协议进行传输 
     https就是http+ssl/tsl  # 相当于加密之后的http 更安全
    
2.接口中带API关键词  可以带在url或域名中
3.多数据版本共存
  一个接口存在多个版本
  在url连接中携带版本标识

4.数据即资源,均使用名词 接口尽量使用名词

5.资源操作由请求方式决定method
  获取数据:get请求
  删除数据:delete请求
  新增数据:post请求
  修改数据:put,patch请求
 # 请求的地址一样,通过请求方式决定对资源进行什么样的操作
 
6.url地址中携带过滤参数
7.响应带状态码
  -http状态码:
        1XX : 表示请求正在处理 
        2XX :表示请求处理成功 200 ok 等
        3XX :重定向 302临时重定向 301永久重定向
        4XX :客户端错误 403拒绝访问csrf  404找不到资源
        5XX:服务端错误  500 服务器内部错误
  -响应体中写状态码:按照公司规范来写

8.返回错误信息 响应体中携带错误信息

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.响应中携带链接
    比如图片链接 跳转的地址链接等
 

postman接口测试工具

官网下载:https://www.postman.com/downloads/

本质就是模拟发送http请求

序列化和反序列化

# api接口开发,最核心常见的一个过程就是序列化 就是把数据转换格式
序列化:将我们能够识别的数据转换成指定的格式提供给别人
反序列化:将被人提供的数据转换成我们能够识别的格式

快速使用drf

# 使用django这个web框架 开发前后端分离项目(模板渲染),只写接口
# 写接口:一共五个请求方式和这些方式的变形
 获取所有 get
 获取单个 get
 新增一条 post
 修改一条 put/patch
 删除一条 delete
需要先下载一下模块:
安装drf:pip3 install djangorestframework
第一步 :先在models里面创建一个模型
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__'
第三步:在view里写入接口函数
from .models import Book
from rest_framework.viewsets import ModelViewSet
from .serializer import BookSerializer


class BookView(ModelViewSet):
    queryset = Book.objects.all()
    serializer_class = BookSerializer

第四步:写路由
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),
    path('admin/',views.TestView.as_view())
]
urlpatterns += router.urls

CBV源码分析(很重要!!!)

path('/',Views.TestView.as_view())
第一个参数是路径,第二个参数是视图函数的内存地址
在TestView没有找到as_view这个方法,只能去继承的类View中找
as_view被@classonlymethod装饰了 继承了classmethod 本质就是classmethod 专门给类调用的方法
在as_view方法内定义了一个view方法 返回的是TestView().dispatch(reuqest)
当请求来了,路由匹配成功,会执行view(request) 本质是执行TestView().dispatch(reuqest)
查看dispatch发现是个方法里面的判断就是为什么cbv能根据请求的方式的不同匹配到不同的方法
 if request.method.lower() in self.http_method_names:
            handler = getattr(self, request.method.lower(), self.http_method_not_allowed)
        else:
            handler = self.http_method_not_allowed
        return handler(request, *args, **kwargs)
    
    通过反射方法getattr,获取到提交的请求,最后返回handler()
    self是TestView的对象 handler就是TestView类的方法
    # CBV视图层中,dispatch方法可以说是前端向后端发送请求的调度员,可以根据不同的请求方式执行视图函数中对应的方法

标签:前后,请求,models,分离,接口,API,import,drf,view
From: https://www.cnblogs.com/Hsummer/p/16723975.html

相关文章

  • drf学习笔记
    今日内容概要前后端开发模式API接口接口测试工具postmanrestful规范序列化和反序列化djangorestframework快速使用cbv源码分析今日内容详细前后端开发模式前后......
  • 前后端开发模式
    前后端开发模式一、传统的开发模式前后端分离前我们的开发协作模式一般都是这样的:前端写好静态的HTML页面交付给后端开发。静态页面可以本地开发,也无需考虑业务逻辑只......
  • 接口文档编写规范(前后端分离项目接口api)
    接口文档编写规范API规范api主要包括四部分:uri、请求方式、请求参数、返回参数,一般就是对这四部分做统一规范接口url:是否是rest风格的,统一标识,比如登录的url:/login......
  • mysql07--主从搭建、Django实现mysql读写分离
    1mysql--单主N从搭建https://www.liuqingzheng.top/python/其他/02-MySQL主从搭建基于docker/1.1基本介绍MySQL支持单向、异步复制,复制过程中一个服务器充当主服务器,......
  • 一套.NET Core +WebAPI+Vue前后端分离权限框架
    今天给大家推荐一个基于.NetCore开发的企业级的前后端分离权限框架。项目简介这是基于.NetCore开发的、构建的简单、跨平台、前后端分离的框架。此项目代码清晰、层......
  • Django--操作mysql实现读写分离
    django操作mysql读写分离#0mysql主从搭建好了#1在setting中配置DATABASES={#主库'default':{'ENGINE':'django.db.backends.mysql'......
  • 浅论前后端,浅论前后端架构分离与否
    前端:通常来说,就是我们可以看得到的部分---一般使用前端语言进行,例如HTML、JS、css等语言进行代码的实现比如:web前后台的界面微信小程序H5app的界面后端:(看不到的......
  • 使用CustomRequestMappingHandlerMapping自定义统一处理前后端接口不一致问题
    springmvc或springboot使用RequestMappingHandlerMapping自定义统一处理前后端接口不一致问题本文地址:https://www.cnblogs.com/muphy/p/16714292.html场景以前老项......
  • 分离、参数化
    1.导入parameterized,实现参数化导入命令:fromparameterizedimportparam,parameterized2.分离分离:把固件分离出来,方便以后换浏览器或者网址测试的修改,否则需要多处......
  • MySQL5.7读写分离
    读写分离关闭防火墙systemctlstopfirewalldsetenforce0Amoeba服务器环境安装安装jdkyuminstalljava安装完成后查看版本java-version修改配置文件vi/etc/......