zoukankan      html  css  js  c++  java
  • 实现修改接口,使用NbView实现添加和nb_response去掉大括号

    新增和查询的都已经实现了,接下来在views_new.py文件里的CaseSet类里实现删除功能,新增代码如下图:

    对于唯一字段的,逻辑删除还会报已存在,直接物理删除就行了,接下来用postman实现,如下图:

    最后实现修改功能,代码如下图:

    request.GET只能取到url里传的数据,?后的XXX=XX,request.POST可以取到postman中body里k-v的数据,只能是post请求的时候取到,其他的请求方式只能通过原始数据进行解析了,put方法里代码如下:

    在postman里用第一种请求方式form-data,然后通过print(dir(request)),看到好多方法,包括parse_file_uploadcontent_type,先把views_new.py文件里的CaseSet类中的修改方法写一下,前提是导入from django.http import JsonResponse, HttpResponse

    在postman里用第一种请求方式:form-data,但是可能会上传文件,如下图:

    点击Send按钮后,在postman里可以看到返回的ok,在pycharm日志里print(dir(request))可以看到下图的方法:

    print(request.META),打印请求头,可以看到下图的方法:

    把代码改一下,把print(request.META)改成print(request.body),打印请求的正文信息,在用postman请求一下,在pycharm的日志里看到如下图:

    传了id和name,从上图中可以看到中间的分隔符是 ...,要想拿到其他请求方式的请求数据只能通过request.parse_file_upload方法实现,里面传两个参数(request.META, request),修改put方法的代码如下:

     点击postman里的Send按钮,在日志里看到data如下图:

    接下来用第二种请求方式:x-www-form-urlencoded,这种方式不会上传文件,如下图:

    print(request.META)可以看到下图的方法:

    把代码改一下,把print(request.META)改成print(request.body),打印请求的正文信息,在用postman请求一下,在pycharm的日志里看到如下图:

    传了id和name,从上图中可以看到中间的分隔符是&,为了解决这两种问题,前提还要导入from django.http import JsonResponse, HttpResponse, QueryDict,方法parse_file_upload用来解析数据,源码里传两个参数,一个是META,另一个是POST.DATA,在这里传入request.META和request,使用如下的代码获取数据,如下图:

    postman配置如下图:

    点击Send按钮,在日志看到如下图:

    postman里两种请求方式form-data和x-www-form-urlencoded的区别是前者request.META打印出的是'CONTENT_TYPE': 'multipart/form-data...',form-data是多媒体类型,有可能会上传文件,后者打印的是'CONTENT_TYPE': 'application/x-www-form-urlencoded',x-www-form-urlencoded是普通文本类型,不会上传文件,所以要判断多媒体类型,代码如下图:

    再用postman请求时报fail,如下图:

    然后要实现此功能要把models.py里的CaseSet里的describe中加上blank=True,blank=True是在form表单发请求时为空(数据库里该字段可以为空),如果没用form,blank=True没有意义,再次请求就OK了

    接下来在models.py里创建一个项目表,复制CaseSet这个类,然后改一下类名为Project等,修改代码如下图:

    然后执行python manage.py makemigrations和python manage.py migrate,生成project表,接下来在forms.py里创建form,把上面的CaseSetForm复制过来,改成ProjectForm,把表改成Project,如下图:

    在utils目录下创建一个custom_view.py文件,里面创建一个PostView类,继承View,把views_new.py里的CaseSet中的post方法拷过来,复制到PostView类下,新增代码如下图:

    接下来在testcase目录下新增一个文件view_custom.py,新增代码如下图:

    然后配置url,在urls.py里首先要导入view_custom.py,新增代码如下图:

    然后启动服务,在postman里的配置如下:

    成功后再添加一条,去project表里看到两条数据,原理是custom_view.py里有一个PostView方法,还有一个form_class变量,如果直接运行这个文件会报错,因为form_class=None,但是view_custom.py里的ProjectView继承了PostView,并把ProjectForm赋值给了form_class,因此ProjectView类里有了post方法,form = self.form_class(request.POST)就相当于form = ProjectForm(request.POST),因为ProjectForm里定义了fields或exclude,就会把需要的字段传过来进行添加,同理下面的CaseView也是一样的原理

    接下来在view_custom.py再导入CaseForm,新增代码如下图:

    然后配置url,在urls.py里新增代码path('case', view_custom.CaseView.as_view()),把上面的case路径注释掉,如下图:

    在postman里的配置如下图:

    添加成功后在case表里可以看到添加成功的数据

    为了防止view_custom.py里赋值出现错误,容易把form_class赋值成Project,还不好排查,因此需要修改一下custom_view.py里的代码,在这里把错误拦截住,新增代码如下图:

    将view_custom.py改成view3.py,将PostView改成NbView,把相应的继承和导入,以及urls.py都改一下

    接下来在custom_view.py里实现删除,删除前要在utils目录下新建一个文件custom_response.py,为了避免代码里出现太多的大括号,写一个公共的函数,新增代码如下图:

    然后修改custom_view.py文件的代码,修改如下图:

    custom_view.py里的代码是框架层的,代码写完后用postman验证一下,如下图:

    反之去掉任意一个必填项,就会报-1和报错信息

  • 相关阅读:
    linux自动清理30天之前的文件
    Oracle树查询及相关函数
    jackson循环引用导致序列化stackOverFlow的解决
    java核心技术36讲笔记
    Quartz学习
    Quartz学习
    java核心技术36讲
    git常用命令
    CTCall简介(后续会继续补充)
    自定义导航栏,隐藏导航栏底部的灰色线条
  • 原文地址:https://www.cnblogs.com/laosun0204/p/12299560.html
Copyright © 2011-2022 走看看