前后端开发模式、API接口、接口测试工具:postman、restful规范、序列化反序列化、djangorestframework快速使用、cbv源码分析

今日内容

刘清政老师的博客:

https://www.liuqingzheng.top/
cnblogs博客:https://www.cnblogs.com/liuqingzheng
知乎:https://www.zhihu.com/people/justin_liu/posts

一、前后端开发模式

  https://www.cnblogs.com/liuqingzheng/p/10900502.html

     补充:

    xadmin:前端的后台管理模板:layui+jquery    国人     贤心

    admin-lte:前端后台管理模板:bootstrap+jquery  老外

    1、前后端混合开发  -------》 模板,使用模板语法渲染模板

      - 图书管理系统

       - bbs项目

       - 后端人员要通过前端写好的html页面,套模板语法

   2、前后端分离

         - 后面的项目

       - 后端人员只负责写接口(API接口),使用postman接口测试工具测试

       - 前端人员负责写前端,写的过程中使用mock数据

        什么是mock数据?

          前后端同时开发的时候,后端接口数据没有出来,前端可以mock假数据,模拟开发

       - 最后:前后端联调项目 

 

二、API接口

      通过网络,规定了前后台信息交互规则的url链接,也就是前后台信息交互的媒介

      之前写的点赞或点踩接口其实就是一个api接口

    什么是接口:配一个路由,写一个视图函数,视图函数返回一个json格式数据,然后接收一下数据

 1、API接口的样子

      1.  url:长得像返回数据的url链接

        https://api.map.baidu.com/place/v2/search

      2.  请求方式:get 、post 、put 、 patch 、 delete  

          采用get方式请求上方接口

      3.  请求参数: json 或 xml 格式的 key-value 类型数据

        ak :  6E823f587c95f0148c19993539b99295

        region : 上海

        query : 肯德基

        output : json

        响应结果 : json 或 xml格式的数据

      4.   响应结果:json 或 xml 格式的数据

三、接口测试工具:Postman

   Postman是一款接口调试工具,支持各种操作系统平台,是测试接口的首选工具

         

       ① API接口写好,后端人员要测试,不可能在浏览器里测试

     ② 使用postman 软件,来做接口测试

        本质就是:模拟发送 http 请求

     ③ 接口测试软件有很多,postman

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

     ⑤ 双击安装

  • 工作面板

  • 简易的get请求

  • 简易的post请求

  • 案例:请求百度地图接口

四、restful规范(4和5是最核心的东西)

 1. 概念

    REST全称是Representational State Transfer,中文意思是表述:表征性状态转移,它首次出现在2000年 Roy Fielding的博士论文中

    RESTful是一种定义web API接口的设计风格,尤其是适用于前后端分离的应用模式中

    restful规范有10点 ----》公司有自己的风格规范

  2.规范

    ① 数据的安全保障:url链接一般都采用https协议进行传输 ----> 为了保证数据安全使用https协议传输

      -https是什么:http+ssl/tsl

      https 比 http 更安全,它是加密之后传的    

    ② 接口中带api关键词

    ③ 多数据版本共存,一个接口可能有多个版本---->url连接中表示版本标识

    ④ 数据即是资源,均使用名词(可用复数)---->接口尽量使用名词

    ⑤ 资源操作由请求方式决定

      -获取数据:get请求

      -删除数据:delete请求

      -新增数据:post请求

      -修改数据:put,patch请求

      -请求地址一样,通过请求方式对资源进行什么操作

     ⑥ url地址中带过滤参数

        -获取动物园所有动物  127.0.0.1/api/vi/animals  ----> get请求

        -获取动物园所有哺乳类动物    127.0.0.1/api/animals?type=哺乳类 ----->get请求

     ⑦ 响应带状态码

        -http状态码:http://tools.jb51.net/table/http_status_code

          -1xx:表示请求正在处理,一般看不到

          -2xx:表示请求处理成功,有很多  200,201

          -3xx:重定向   302  301

          -4xx:客户额度按错误    403   404

          -5xx:服务端错误

         -响应体中写状态码:咱们公司里有规范,在响应体重写状态码    {code:100}

五、序列化和反序列化

  ps:api接口开发,最核心最常见的一个过程就是序列化,所谓序列化就是把数据转换格式,序列化可以分两个阶段:

  1.  序列化:

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

      -例如:我们在django中获取到的数据默认是模型对象(queryset),但是模型对象数据无法直接提供给前端或别的平台使用,

           所以我们需要把数据进行序列化,变成字符串或者json数据,提供给别人

  2.  反序列化:

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

六、djangorestframework快速使用

    1.   使用django这个web框架,开发前后端分离项目(模板渲染),只写接口

      -使用JsonResponse返回即可----》原生django

      -djangorestframework方便咱们快速写出符合restful规范的接口

    2.   写接口:总共就五个及这五个的变形

       

①  获取所有 get
②  获取单个 get
    ③  新增一条  post
    ④  修改一条  put/patch
⑤  删除一条 delete

    3.  对于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测试

七、cbv源码分析

 以后都写cbv,都写基于类的视图

  cbv 写好后,路由配置如下

    1.  第一个参数是路径,第二个参数是视图函数的内存地址(视图类执行as_view这个类方法,把它执行,结果放在第二个参数上,我们才执行完的结果是个函数内存地址)

    path('test/',views.TestView.as_view())

    2.  去找 as_view ,去 TestView 类中找,找不到,没有,去父类中找View

@classonlymethod
        def as_view(cls, **initkwargs):
            def view(request, *args, **kwargs):
                return self.dispatch(request, *args, **kwargs)
            return view

     3.  当请求来了,路由匹配成功,会执行view(request)------->本质执行

        self.dispatch(request, *args, **kwargs)

    4.  去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)

 

posted @ 2023-01-31 15:12  Super小赵  阅读(31)  评论(0编辑  收藏  举报
****************************************** 页脚Html代码 ******************************************