drf引入

【一】前后端开发模式

1.前后端混合---》用的模板语法dtl,后端进行渲染:
    -django template language 模板语法
        -{{}}
        -{%%}
    -后端的处理的到的数据,前端用模板语法,渲染出来--》渲染完后浏览器会对模板语法进行处理,得到的页面是是纯前端页面,里面不会有模板语法
​
2.前后端分离---》通过写api接口,前后端进行数据交互json
eg:前端用ajax对指定的api地址链接提交请求,然后后台得到请求回返回数据,在ajax把得到的数据,进行处理,给前端渲染

f9eb24cda66c46f0afca028b3f133f2d.png

269a570d82d243d59a42d0e442de0171.png

【二】api接口

1.api接口是什么?
    就是符合restful规范(前后台信息交互的规则)的链接,用不同的请求方式有不同的操作数据
    
2.api接口内容
    -1.url:url链接
    -2.请求方式:get(对数据进行查,有两种查全部还是查局部),post(增加数据),delete(删除数据,带参数的),put(改数据,带参数)
    -3.请求参数:可以是json或xml(用的极少)格式
        地址栏中带参数eg:login/?name=llh
        请求体中:不同的编码格式:urlencoded(默认),json,form-data(文件格式)
        """当你想在HTTP请求中使用JSON编码格式时,你需要在请求头(Headers)中指定Content-Type为application/json。"""
     -4.响应结果:json或xml
    
补充回忆:
"""
http协议:
    -请求首行:版本协议 请求路径 请求方式
    -请求头:很多的键值对
    -换行
    -请求体:不同的编码格式
"""

【三】接口测试工具

1.postman
    -可以模拟发送http请求
        -可以发送任意请求
        -可以携带请求头,请求体,请求参数
下载地址:https://www.postman.com/
        -win:Postman-win64-Setup.exe
        -mac:Postman-win64-Setup.dmg
​
2.apifox可以了解一下
apifox=postman++ Swagger[接口文档] + Mock[模拟测试数据] + JMeter[压测工具]
下载地址:https://apifox.com/
​
postman 使用如下

06f3de99852e4662851d3430f2fb17e8.png

【四】restful规范(重点)

# 1 前后端分离后,后端写api接口
    -接口不能乱写
    -有些规范
        -restful规范:公共的规范,大家都尽量遵守的规范
        -公司自己的规范
    -RESTful是一种定义Web API接口的设计风格,尤其适用于前后端分离的应用模式中  
    
#规范内容
    -1.数据安全保障-->保证url链接使用https
            -https比http更安全
    -2.接口中带api标识(以下两种都可以)
            -https://api.baidu.com
            -https://www.baidu.com/api
    -3.接口中带版本标识(看公司规则有的是2,有的是v2这样)
            -https://api.baidu.com/v1
            -https://api.baidu.com/v2
    -4.数据就是资源,所以最好都是使用名词,可以是名词复数,但是也有不可避免的时候
            -https://api.baidu.com/users
            -https://api.baidu.com/books
            -https://api.baidu.com/book
    -5.通过请求方式,决定资源的操作方式(增删改查curd)               https://api.baidu.com/books - get请求:获取所有书
            https://api.baidu.com/books - post请求:新增一本书书
            https://api.baidu.com/books/1 - get请求:获取主键为1的书
            https://api.baidu.com/books/1 - put请求:整体修改主键为1的书
            https://api.baidu.com/books/1 - delete请求:删除主键为1的书
     -6.请求地址中带过滤条件
            https://api.example.com/v1/zoos?name=monkey
     -7.响应中带状态码
            - http响应状态码:1xx,2xx,3xx,4xx,5xx
            - 公司自定义的状态码
                -100 成功
                -101 xx错误
                -102  xx错误
            - mysql:以后遇到错误,不要搜文字,搜错误码
            -{code:100}
      -8.响应中带错误信息
            -{code:101,msg:"用户名密码错误"}
            -{code:100,msg:"成功"}
      -9返回的结果,对不同的操作,服务器返回的结果应符合如下规范
            
            GET /collection:返回资源对象的列表(数组)  --》返回你查到的
            [{name:红楼梦,price:100},{name:红楼梦1price:90}]
            GET /collection/resource:返回单个资源对象--》返回你查到的
                -{name:红楼梦,price:100}
            POST /collection:返回新生成的资源对象 --》返回你增加的
                -{name:红楼梦,price:100}
            PUT /collection/resource:返回完整的资源对象 --》返回你修改后的
                -{name:红楼梦,price:100}
            DELETE /collection/resource:返回一个空文档 --》返回空
    -10返回数据中带url链接
            -即返回结果中提供链接,连向其他API方法,使得用户不查文档,也知道下一步应该做什么
            eg:
                            {
                "status": 0,
                "msg": "ok",
                "results":[
                    {
                        "name":"肯德基(罗餐厅)",
                        "img": "https://image.baidu.com/kfc/001.png"
                    }
                    ...
                    ]
            }
​
# 最后,比较好的接口返回格式
{
    "code": 0,
    "msg": "ok",
    "results":[
        {
            "name":"肯德基(罗餐厅)",
            "location":{
                "lat":31.415354,
                "lng":121.357339
            },
            "address":"月罗路2380号",
            "province":"上海市",
            "city":"上海市",
            "area":"宝山区",
            "street_id":"339ed41ae1d6dc320a5cb37c",
            "telephone":"(021)56761006",
            "detail":1,
            "uid":"339ed41ae1d6dc320a5cb37c"
        }
        ...
        ]
}

【五】序列化和反序列化

1.序列化就是把数据转换成指定的格式
eg:在django中数据默认是模型对象(queryset对象),但是模型对象无法直接给前端用,所以需要序列化,变成json格式给别人。
"""
因为它们包含了数据库查询的元信息和Django模型层的逻辑,而前端(尤其是JavaScript或HTML)通常期望的是简单的数据结构,如JSON。
"""
2.反序列化:就是被序列化的数据,转换成原本的格式
eg:前端js提供过来的json数据,对于python而言就是字符串,我们需要进行反序列化转换成模型类对象,这样我们才能保存到数据库中
"""
当这些数据通过HTTP请求(如POST或PUT请求)发送到后端Python服务器时,它们并不是以Python对象的形式直接存在的。相反,这些数据是作为HTTP请求体的一部分,以字符串的形式发送的。这个字符串是JSON格式的,但它仍然是一个字符串,只是其内容遵循了JSON的语法规则。
"""

【六】drf安装和快速使用

#1  以book表为例
    -写符合restful规范的5个接口
#2 drf是什么?
    django rest framwork:django框架上 一个可以快速实现restful规范接口的 快速开发框架
    
# 3 安装
    pip3 install djangorestframework
    最新drf支持django4.x以上
    django:pip3 install django==4.2.14
    drf:pip3 install djangorestframework --upgrade     # 3.15.2
    
# 4 关于软件版本    
    eg:python:  
        3.12.x
        3.11.09  # 小版本做bug更改
        中间的数表示对功能进行升级
        x表示改了bug
#  1 urls中
"""在这个文件中,你使用SimpleRouter来自动生成URL路由。你注册了一个名为task的路由,它关联到TaskView视图集,并且指定了路由名称也为task。然后,你将路由器生成的URL添加到urlpatterns列表中。"""
from rest_framework.routers import SimpleRouter
router = SimpleRouter()
router.register('task', TaskView, 'task')
urlpatterns = [
]
urlpatterns += router.urls
#  2 views中
"""在这个文件中,你定义了一个TaskView类,它继承自ModelViewSet。ModelViewSet是一个提供完整CRUD(创建、检索、更新、删除)操作的视图集。你指定了查询集为Task.objects.all(),这意味着API将能够访问数据库中所有的Task对象。你还指定了序列化器类为TaskSerializer。"""
from .models import Task
from .serializer import TaskSerializer
from rest_framework.viewsets import ModelViewSet
class TaskView(ModelViewSet):
    queryset = Task.objects.all()
    serializer_class = TaskSerializer
    
    
#  3 serializer.py
在这个文件中,你定义了一个TaskSerializer类,它继承自serializers.ModelSerializer。你指定了模型为Task,并且使用fields = '__all__'来指示序列化器应该包含模型的所有字段。
from rest_framework import serializers
from .models import Task
class TaskSerializer(serializers.ModelSerializer):
    class Meta:
        model = Task
        fields = '__all__'
#  4 models.py
from django.db import models
​
class Book(models.Model):
    name = models.CharField(max_length=32)
    price = models.IntegerField()
注意:出现这种错误
'the URL doesn't end in a """slash""" and you have APPEND_SLASH set'-->slash就是因为postman对url的末尾加斜杆是严格,不像浏览器会自动添加
一般在delete和put请求的时候
​

 

 

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值