前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python测试开发django-59.restful接口开发

python测试开发django-59.restful接口开发

作者头像
上海-悠悠
发布2019-09-17 14:27:29
6260
发布2019-09-17 14:27:29
举报
文章被收录于专栏:从零开始学自动化测试

前言

REST 不是什么具体的软件或者代码,而是一种思想。现在流行前后端分离开发项目,一般用 json 来交换数据。 相信写过模板的同学都知道,只要哪怕页面中的数据有一丝丝变动,那整个页面都需要重新渲染,这对性能无疑是巨大的浪费,并且页面中只有一些元素会和数据相联系,比如列表中的元素,如果数据有变化,能直接只更新元素就好了,REST 就是为此而生。

REST简介

什么是RESTful 面向资源?

先看REST是什么意思,英文Representational state transfer 表述性状态转移 其实就是对 资源 的表述性状态转移。 简单的说:RESTful是一种架构的规范与约束、原则,符合这种规范的架构就是RESTful架构。

资源的地址 在web中就是URL (统一资源标识符) 资源是REST系统的核心概念。所有的设计都是以资源为中心

结合项目怎么识别资源 1.商品加入购物车 购物车 2.提交订单 订单 3.创建用户 用户

围绕资源进行 添加,获取,修改,删除,以及对符合特定条件的资源进行列表操作 。针对资源设计接口

关于规范与约束有哪些?

RESTful 架构的核心规范与约束:统一接口 分为四个子约束: 1.每个资源都拥有一个资源标识,每个资源的资源标识可以用来唯一地标明该资源 2.消息的自描述性 3.资源的自描述性。 4.HATEOAS Hypermedia As The Engine Of Application State(超媒体作为应用状态引擎) 即客户只可以通过服务端所返回各结果中所包含的信息来得到下一步操作所需要的信息,如到底是向哪个URL发送请求等。也就是说,一个典型的REST服务不需要额外的文档标示通过哪些URL访问特定类型的资源,而是通过服务端返回的响应来标示到底能在该资源上执行什么样的操作

目的:实现客户端无需借助任何文档即能调用到所有的服务器资源

基本实现

先安装对应的模块

pip install djangorestframework pip install django-filter

在setting.py中加入配置参数

代码语言:javascript
复制
INSTALLED_APPS = (
    ...
    'rest_framework',
)

models.py

代码语言:javascript
复制
class Card(models.Model):
    '''银行卡 基本信息'''
    card_id = models.CharField(max_length=30, verbose_name="卡号", default="")
    card_user = models.CharField(max_length=10, verbose_name="姓名", default="")
    add_time = models.DateField(auto_now=True, verbose_name="添加时间")

    class Meta:
        verbose_name_plural = '银行卡账户'
        verbose_name = "银行卡账户_基本信息"

    def __str__(self):
        return self.card_id

views.py

代码语言:javascript
复制
from rest_framework import viewsets
from rest_framework import serializers
from .models import *
from django.http import QueryDict
from rest_framework.request import Request
def get_parameter_dic(request, *args, **kwargs):
    if isinstance(request, Request) == False:
        return {}

    query_params = request.query_params
    if isinstance(query_params, QueryDict):
        query_params = query_params.dict()
    result_data = request.data
    if isinstance(result_data, QueryDict):
        result_data = result_data.dict()

    if query_params != {}:
        return query_params
    else:
        return result_data

class CardSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Card
        fields = "__all__"

class CardViewSet(viewsets.ModelViewSet):
    queryset = Card.objects.all()
    serializer_class = CardSerializer

    def get(self, request, *args, **kwargs):
        params=get_parameter_dic(request)
        return JsonResponse(data=params)

    def post(self, request, *args, **kwargs):
        params=get_parameter_dic(request)
        return JsonResponse(data=params)

    def put(self, request, *args, **kwargs):
        params=get_parameter_dic(request)
        return JsonResponse(data=params)

urls.py

代码语言:javascript
复制
from django.conf.urls import include
from hello import views
from rest_framework import routers

router = routers.DefaultRouter()
router.register(r'books', views.BookViewSet)

urlpatterns = [
    url(r'^', include(router.urls)),
]

测试接口

使用fiddler测试刚才写的接口

get查看数据

发送get请求:http://127.0.0.1:8000/cards/

数据库表里面数据为空

post提交数据

发送post请求:http://127.0.0.1:8000/cards/

提交成功后,查看数据库,会发现新增了一条数据

查看数据

可以多新增几个,查看所有的数据

只查看其中的一条数据,后面加上它的id,http://127.0.0.1:8000/cards/65/

编辑数据

编辑数据,发送put请求,后面接上它的id

删除数据

删除数据,用delete请求,后面接上它的id

删除之后,刚才这个数据就没有了

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-09-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 从零开始学自动化测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • REST简介
    • 什么是RESTful 面向资源?
      • 关于规范与约束有哪些?
      • 基本实现
      • 测试接口
        • get查看数据
          • post提交数据
            • 查看数据
              • 编辑数据
                • 删除数据
                相关产品与服务
                数据库
                云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档