django drf 案例--实现url编码和json和dict格式转化小工具(涉及定义模型类,序列化器,类视图,路由),接口测试

简介: django drf 案例--实现url编码和json和dict格式转化小工具(涉及定义模型类,序列化器,类视图,路由),接口测试

整体目录

模型类models.py

from django.db import models
class UrlCoding(models.Model):
    raw_data = models.CharField(max_length=128, verbose_name='原始数据')
    coding_count = models.IntegerField(verbose_name='编码次数')
    new_data = models.CharField(max_length=128, verbose_name='新数据')
class JsonDict(models.Model):
    raw_data = models.TextField(verbose_name='原始数据', default='1')
    who_change = models.CharField(max_length=32, verbose_name='谁发起的格式转化')
    new_data = models.TextField(verbose_name='新数据', default='1')

序列化serializers.py

from rest_framework import serializers
from apps.tool.models import UrlCoding, JsonDict
#ModelSerializer会根据模型自动生成一组字段
class UrlCodingSerializer(serializers.ModelSerializer):
    class Meta:
        model = UrlCoding
        fields = '__all__' #返回数据展示字段为全部
        read_only_fields = ('id', 'new_data') #只读字段
class JsonDictSerializer(serializers.ModelSerializer):
    class Meta:
        model = JsonDict
        fields = '__all__'
        read_only_fields = ('id', 'new_data')

视图views.py

from rest_framework import status
from rest_framework.response import Response
from rest_framework.views import APIView
from apps.tool.gj import check_contain_chinese
from apps.tool.models import UrlCoding, JsonDict
from apps.tool.serializers import UrlCodingSerializer, JsonDictSerializer
import urllib.parse
class UrlCodingView(APIView):
    def get(self,request):#request没用到也必须写,不然会报错
        url_coding = UrlCoding.objects.all()#获取数据库所有数据
         #many=True表示允许有多条数据,instance=url_coding设置要反序列化的数据
        us = UrlCodingSerializer(instance=url_coding, many=True)
        return Response(data=us.data, status=status.HTTP_200_OK)
    def post(self, request):
      #序列化是python对象转化为json数据,反序列化是把json数据转为python对象
      #反序列化
        u = UrlCodingSerializer(data=request.data)
        #数据验证is_valid(),验证反序列化时的请求参数是否满足序列化器的要求,我这里使用的是ModelSerializer数据库序列化器
        #这里的检验要求就是UrlCoding模型类的raw_data 字段的设置就是最大长度不超过128,max_length=128,下面测试我会使用到
        if u.is_valid():
            raw_data = request.data['raw_data']
            coding_count = request.data['coding_count'] #编码次数
            if check_contain_chinese(raw_data):
                new_data = urllib.parse.quote(raw_data)
                for i in range(coding_count - 1):
                    new_data = urllib.parse.quote(new_data)
                #ModelSerializer序列化器默认实现了sava保存数据入库的方法,会自动把反序列化的数据存入到数据库
                #也可以在里面直接写值
                u.save(new_data=new_data)
                #status状态码,框架自带
                return Response(data=u.data, status=status.HTTP_200_OK)
            return Response({'err': '不包含中文不需要解码'}, status=status.HTTP_400_BAD_REQUEST)
        return Response(data=u.errors, status=status.HTTP_400_BAD_REQUEST)
class JsonDictView(APIView):
    def get(self,request):
        json_dict = JsonDict.objects.all()
        jd = JsonDictSerializer(instance=json_dict, many=True)
        return Response(data=jd.data, status=status.HTTP_200_OK)
    def post(self, request):
        print(request.data)
        j = JsonDictSerializer(data=request.data)
        if j.is_valid():
            raw_data = request.data['raw_data']
            who_change = request.data['who_change']
            if who_change == 'json_dict':
                new_data = raw_data.replace("\"", "'").title().replace('Null', 'None')
                j.save(new_data=new_data)
                return Response(data=j.data, status=status.HTTP_200_OK)
            elif who_change == 'dict_json':
                new_data = raw_data.replace("'", "\"").lower().replace('none', 'null')
                j.save(new_data=new_data)
                return Response(data=j.data, status=status.HTTP_200_OK)
            return Response({'err': '请填写json_dict或dict_json'})
        return Response(data=j.errors, status=status.HTTP_400_BAD_REQUEST)

二级路由apps.tool.urls.py

from django.urls import path, include
from apps.tool import views
urlpatterns=[
    #二级路由
    path('url_coding/', views.UrlCodingView.as_view()),
    path('json_dict',views.JsonDictView.as_view())
]

一级路由gadget.urls.py

from django.contrib import admin
from django.urls import path, include
urlpatterns = [
    #一级路由
    path('admin/', admin.site.urls),
    path('tool/',include('apps.tool.urls')),
]

测试

长度超过128

相关文章
|
1月前
|
Java 测试技术 容器
Jmeter工具使用:HTTP接口性能测试实战
希望这篇文章能够帮助你初步理解如何使用JMeter进行HTTP接口性能测试,有兴趣的话,你可以研究更多关于JMeter的内容。记住,只有理解并掌握了这些工具,你才能充分利用它们发挥其应有的价值。+
260 23
|
6月前
|
数据可视化 前端开发 测试技术
接口测试新选择:Postman替代方案全解析
在软件开发中,接口测试工具至关重要。Postman长期占据主导地位,但随着国产工具的崛起,越来越多开发者转向更适合中国市场的替代方案——Apifox。它不仅支持中英文切换、完全免费不限人数,还具备强大的可视化操作、自动生成文档和API调试功能,极大简化了开发流程。
|
3月前
|
SQL 安全 测试技术
2025接口测试全攻略:高并发、安全防护与六大工具实战指南
本文探讨高并发稳定性验证、安全防护实战及六大工具(Postman、RunnerGo、Apipost、JMeter、SoapUI、Fiddler)选型指南,助力构建未来接口测试体系。接口测试旨在验证数据传输、参数合法性、错误处理能力及性能安全性,其重要性体现在早期发现问题、保障系统稳定和支撑持续集成。常用方法包括功能、性能、安全性及兼容性测试,典型场景涵盖前后端分离开发、第三方服务集成与数据一致性检查。选择合适的工具需综合考虑需求与团队协作等因素。
310 24
|
3月前
|
SQL 测试技术
除了postman还有什么接口测试工具
最好还是使用国内的接口测试软件,其实国内替换postman的软件有很多,这里我推荐使用yunedit-post这款接口测试工具来代替postman,因为它除了接口测试功能外,在动态参数的支持、后置处理执行sql语句等支持方面做得比较好。而且还有接口分享功能,可以生成接口文档给团队在线浏览。
158 2
|
4月前
|
JSON 人工智能 数据可视化
实用工具推荐第二期结合deepseek的思维导图开源免费工具 JSON 可视化工具
JSON 数据可视化为交互式的树形图或图形,帮助直观理解文件结构和模块之间的联系。
|
5月前
|
JSON 前端开发 测试技术
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
183 10
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
|
5月前
|
JSON 前端开发 API
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
175 5
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
|
4月前
|
存储 JSON API
Python测试淘宝店铺所有商品接口的详细指南
本文详细介绍如何使用Python测试淘宝店铺商品接口,涵盖环境搭建、API接入、签名生成、请求发送、数据解析与存储、异常处理等步骤。通过具体代码示例,帮助开发者轻松获取和分析淘宝店铺商品数据,适用于电商运营、市场分析等场景。遵守法规、注意调用频率限制及数据安全,确保应用的稳定性和合法性。
|
4月前
|
监控 API 开发工具
Socket.IO介绍,以及怎么连接测试Socket.IO接口?
Socket.IO 是一个用于浏览器和服务器间实时双向通信的库,支持低延迟消息传递、跨平台运行及自动重连。文章介绍了其特点与调试需求,并详细说明如何使用 Apifox 工具创建、连接、发送/接收 Socket.IO 事件,以及团队协作和调试技巧。掌握这些技能可提升实时应用开发效率与质量。
|
5月前
|
小程序 测试技术 数据安全/隐私保护
微信公众号接口测试实战指南
微信公众号接口测试是确保系统稳定性和功能完整性的重要环节。本文详细介绍了测试全流程,包括准备、工具选择(如Postman、JMeter)、用例设计与执行,以及常见问题的解决方法。通过全面测试,可以提前发现潜在问题,优化用户体验,确保公众号上线后稳定运行。内容涵盖基础接口、高级接口、微信支付和数据统计接口的测试,强调了功能验证、性能优化、安全保护及用户体验的重要性。未来,随着微信生态的发展,接口测试将面临更多挑战和机遇,如小程序融合、AI应用和国际化拓展。