首页 > 其他分享 >drf-day2

drf-day2

时间:2023-08-29 15:34:53浏览次数:32  
标签:name api request day2 django books https drf

昨日作业

1 用django写个demo---》postman测试
  1 、传用户名密码到后端,查询数据库,都对了---》返回json格式{code:100,msg:登录成功}---》urlencoded
  2、 打印 request.POST
  3 、打印 request.body

2 写一个接口,可以长传文件{code:100,msg:上传成功}
  request.POST---->有没有取决于前端传没传数据
  request.body--->小文件没事,大文件报错



3 扩展作业(学的好的)
测:json格式---》request.POST 取不到
request.data 默认没有---》(装饰器)--->无论前端什么格式:josn,urlencoded---》都取出来,是字典
@xxxx
def Inde(request):
  request.data

昨日总结

1 前端不同编码格式:
  urlencoded: body体中 :username=lqz&password=123 django 的request.POST取出值
  json: body体中 :{"username":"lqz","password":"123"} django 的request.POST取不出值
  form-data:body中格式固定:数据部分和文件部分--》request.POST能取出数据,取不出文件,文件都是从request.FILES
  '----------------------------789048583058585187025897\r\nContent-Disposition: form-data; name="username"\r\n\r\nlqz\r\n文件二进制

 

2 mysql中varchar和char的区别:定长与不定长

  1、char是一种固定长度的类型,无论储存的数据有多少都会固定长度,如果插入的长度小于定义长度,则可以用空格进行填充。而varchar是一种可变长度的类型,当插入的长度小于定义长度时,插入多长就存多长。

  2、最大长度:char最大长度是255字符,varchar最大长度是65535个字节。

  3、char会浪费空间,varchar会更加节省空间。

3 不用pycharm创建django 项目:

  django-admin startproject 项目名

 4 django中的文件对象和原来的文件对象  

  django:from django.core.files.uploadedfile import InMemoryUploadedFile
  原生文件:_io.BufferedWriter
  django中文件类没有继承原生文件类,但是有原生文件类所有方法

5 装饰器模版

def warpper_request(func):
    def inner( *args, **kwargs):
        # 在执行被装饰函数前执行
        res = func(*args, **kwargs)
        # 在执行被装饰函数后执行
        return res
    return inner

 

restful规范

 1.restful规范是什么,如何来的?

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

  Roy Fielding的博士论文提出的

2.以后写api接口都要遵循restful规范

  1、数据安全性,我们要使用https协议,不使用http,因为https比http安全

  2、接口特征的表现,url带有api标识

    1.https://api.baidu.com/books/

    2.https://www.baidu.com/api/books/

  3、多版本数据共存,也就是在url中要带有版本信息

    1.https://api.baidu.com/v1/books
    2.https://www.baidu.com/api/v2/books

  4、数据即资源,均使用名词(复数),前后台交互的数据称之为资源,URL尽量使用名词

    https://127.0.0.1/api/v1/books/(表示对图书操作:增加,删除,查询,修改,都用这一个地址)
    https://127.0.0.1/api/v1/get_all_books/ (不符合restful规范)
    https://127.0.0.1/api/v1/delete_books/(不符合restful规范)

  5、资源操作由请求方式来决定

    get 请求获取数据(获取所有,获取单条)
    post 新增数据
    put 修改数据
    delete 删除数据
    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、请求方式带过滤条件(只针对查询所有)

  7、响应状态码

    http响应状态码: 1xx,2xx,3xx,4xx,5xx:https://www.sohu.com/a/278045231_120014184
    404和403 和 405

      403:服务器收到请求但拒绝提供服务

      404:找不到url

      405:请求方式有误(post请求却用了get请求)
    301和302

      301:永久重定向

      302:临时重定向
    1xx表示请求正在处理(前端一般看不到)
    2xx 表示请求处理成功(经常看到)
    201和200有什么区别

      200:常规请求成功

      201:请求成功并创建新的资源
    3xx:重定向
    4xx:客户端错误
    5xx:服务端出错
    成功都返回200,而在响应体中带 状态码--->code不同公司就不一样
      {"code": 101,"msg": "用户名或密码错误"}
    补充一:mysql 错误操作都会有个 数字(10060) 文字解释

  8、响应状态中带错误信息

    {‘code’:101,‘msg’:‘用户名或密码错误’}

  9、不同操作返回格式不同

    GET /collection:返回资源对象的列表(数组)
      [{name:西游记,price:19},{name:三国,price:19}]
    GET /collection/resource:返回单个资源对象
      {name:三国,price:19}
    POST /collection:返回新生成的资源对象
      {name:三国,price:19}
    PUT /collection/resource:返回完整的资源对象
      {name:三国演绎,price:19}
    DELETE /collection/resource:返回一个空文档

  但一般都是这样做:   

    {code:100,msg:查询成功,restult:[{name:西游记,price:19},{name:三国,price:19}]}

  10、响应带连接
    {code:100,msg:查询成功,restult:[{name:西游记,price:19},{name:三国,price:19}] ,url:/login/} 

序列化与反序列化

序列化:数据之间格式的转换

序列化: 把我们识别的数据转换成指定的格式提供给别人。
例如:我们在django中获取到的数据默认是模型对象,但是模型对象数据无法直接提供给前端或别的平台使用,所以我们需要把数据进行序列化,变成字符串或者json数据,提供给别人。


反序列化:把别人提供的数据转换/还原成我们需要的格式。
例如:前端js提供过来的json数据,对于python而言就是字符串,我们需要进行反序列化换成模型类对象,这样我们才能把数据保存到数据库中

 

drf的安装与快速使用    

1、假设以 Book 表为例,写它的5个接口  

  1 查询所有
  2 新增一条
  3 修改一条
  4 删除一条
  5 查询一条

2、使用步骤:

  1.安装模块

django 是2版本,用不了drf最新(适当降版本),他会卸载django---》装最新4.x
djagno 3.1.12 可以使用drf最新    
django:3.1.12
drf:3.14.0

  2.在setting中app注册

INSTALLED_APPS = [
            'rest_framework',  # 一定不要忘了加  ,
        ]

  3.写路由

 from rest_framework.routers import DefaultRouter
    router = DefaultRouter()
    router.register('books', BookView, 'books')
    
    urls=[]
    
    urlpatterns += router.urls

  4.写视图类

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

  5.写序列化类

class BookSerializer(serializers.ModelSerializer):
    class Meta:
        model = Book
        fields = "__all__"

 

标签:name,api,request,day2,django,books,https,drf
From: https://www.cnblogs.com/shanghaipudong/p/17664925.html

相关文章

  • 第一节 drf入门规范
    一web应用模式它是djangoweb框架,专门用来写web项目1前后端混合开发模式---》常见公司老项目-后端人员,写后端,也要写模板语法--->模板语法就是写的xx.html的Python代码-全栈开发,前后端都写 2前后端分离开发模式---》新项目,时下比较流行-后端不用写前端,只需要写接......
  • drf
    web开发模式前后端混合开发模式(老项目)前后端分离开发模式(新项目) API接口防止个人习惯差异引起的混乱,找到一个大家都觉得很好的接口实现规范,这个规范能够让后端写的接口用途一目了然,减少双方之间的合作成本。api接口:通过网络,规定了前后台信息交互规则的url链接,也就是前后......
  • [代码随想录]Day29-贪心算法part03
    题目:1005.K次取反后最大化的数组和思路:思路是:先把负数从小到大变成正数(即绝对值由大到小)如果还需要变化(k>0),就变化最小的数在第一步变化的同时顺便记录一个数组和,那么结束之后会有三种情况:k==0;也就是说负数的个数大于等于k,直接返回结果k%2==0;此时全是正整数,......
  • drf-day01
    web开发模式1、前后端混合开发模式---》老项目 2、前后端分离开发模式---》新项目 api接口为了在团队内部形成共识、防止个人习惯差异引起的混乱,我们需要找到一种大家都觉得很好的接口实现规范,而且这种规范能够让后端写的接口,用途一目了然,减少双方之间的合作成本api......
  • [刷题记录Day22]Leetcode二叉树
    No.1题目二叉搜索树的最近公共祖先思路递归法BST特性如何利用?在BST中,公共祖先一定在p、q数值范围的中间利用BST特性定向搜索注意递归遍历一条边和遍历整棵树的写法不同递归分析返回值:节点,参数:当前节点,p,q终止逻辑:发现当前节点为空,则直接返回当前节点;为什么不用判断p......
  • [代码随想录]Day27-贪心算法part01
    题目:455.分发饼干思路:贪心,思路是尽量先给胃口值小的分,饼干也是从小的开始分:如果饼干满足了胃口值,结果+1换下一个人,下一个饼干如果饼干满足不了胃口值,换下一个饼干(满足不了胃口值小的一定满足不了大的)代码:funcfindContentChildren(g[]int,s[]int)int{res:=......
  • [代码随想录]Day26-回溯算法part06
    题目:332.重新安排行程思路:其实这里已经是图的部分了,回溯应该也可以。Hierholzer算法解决欧拉问题代码:funcfindItinerary(tickets[][]string)[]string{var(m=map[string][]string{}res[]string)for_,ticket:=rangeticket......
  • [代码随想录]Day25-回溯算法part05
    题目:491.递增子序列思路:核心问题——同层去重,这一题不能够重新排序因此不可以用i>index&&nums[i]==nums[i-1]来去重,而是每一层开一个map来判断该数是否出现过代码:var(res[][]intpath[]int)funcfindSubsequences(nums[]int)[][]int{res=make(......
  • [代码随想录]Day24-回溯算法part04
    题目:93.复原IP地址思路:函数参数:参数就一个stirng,path先收集ip地址的四个部分,最后存入res中时拼接成一个string,因此path和res都是[]string类型终止条件:当path有了ip的四个部分就终止;当然只有完全的把字符串遍历了才会存入res单层逻辑:先取1-3位,判断是不是0-255内的数并且没......
  • Django 基于DRF的列表增删改查
    基于DRF的列表增删改查目录基于DRF的列表增删改查1表结构2基于APIView实现对course表获取所有数据,增加数据2.1ser2.2views2.3urls3基于ListAPIView、CreateAPIView实现获取所有数据,增加数据3.1ser3.2views3.3urls4基于ModelViewSet实现Course表实现增删改查4.1ser4.2......