• Django框架之获取客户端发送的数据


    在Django框架中,我们可以获取到很多的数据;接下来我就为大家介绍一下如何获取客户端发送的数据。

    1. 根据正则表达式匹配url中的数据

    在子路由中根据正则表达式匹配到url中的数据,并传递给视图函数

      通过位置参数,给视图函数进行传参

    url(r'^index/([a-zA-Z]+)/(d+)',views.视图函数名,name='视图函数名')

      通过关键字参数,给视图函数进行传参

    url(r'^index/(?P<参数1>[a-zA-Z]+)/(?P<参数2>d+)',views.视图函数名,name='视图函数名')

    这里给大家明确一下概念:

    查询字符串:url中的参数

    查询字典:有request对象的GET、POST属性获取到的数据

    非表单数据:JSON数据、XML数据

    以下是利用客户端的请求对象request进行获取数据的基本操作流程。

    2. 利用request对象获取url中的查询字符串

    查询字符串就是url地址中?后面的数据,如:http://www.baidu.com/?name=tom&age=22&sex=male

    其中name=tom&age=22&sex=male就是查询字符串。

    我们可以通过request对象的GET属性获取由查询字符串组成的字典,然后进行相应的操作。

    查询字典(QueryDict)由两个方法:get()方法获取单一的键的值、getlist()方法获取一个键对应的多个值、字典名[‘’键名]。

    def index(request):
        # 获取查询字典
        data = request.GET
        name = data.get('key')
        age = str(data.get('key'))
        content = name + ' ' + age
        hobby = data.getlist('key')
        return HttpResponse(content)

    注意:

    以下操作推荐使用PSOTMAN软件进行测试,在测试之前需要关闭Django框架中的CSRF防护功能

    POSTMAN下载地址:

    链接:https://pan.baidu.com/s/1JtI-Deu-xmHx6dTZ-INTTQ
    提取码:o4xn

    3.  获取请求体中的Form表单数据

    利用request对象的POST属性,可以获取到请求体中的Form表单中的数据组成的查询字典。

    查询字典(QueryDict)由三个方法:get()方法获取单一的键的值、getlist()方法获取一个键对应的多个值、字典名[‘’键名]。

    def index(request):
        # 获取请求体中的Form表单数据
        # requerst.POST中的POST是属性
        # 获取查询字典
        data = request.POST
        content = '<h1>name:%s age:%s</h1>' % (data['name'], data['age'])
    
        return HttpResponse(content)

    4.  获取请求体中的非表单数据(JSON数据)

    利用request对象的body属性,可以获取到请求体中的非表单数据(字节流的JSON字符串)。

    import json
    
    
    def index(request):
        json_str = request.body.decode()
        # 将获取到的JSON字符串转换成字典
        json_dict = json.loads(json_str)
        content = json_dict['key']
        return HttpResponse(content)

    5.  获取请求头中的数据

    利用request对象的MATE属性,可以获取到请求头中的所有数据并组成一个普通字典。

    这里提一点,HTTP协议的请求行、请求头、请求体是我们人为划分出来的,在实际传输中只有一个请求头。

    def index(request):
        data_dict = request.META
        print(type(data_dict))
        content = ''
        for key in data_dict:
            content += str(key) + '----->' + str(data_dict.get(key)) + '<br>'
        return HttpResponse(content)
    该花的钱要花,该吃的饭要吃。
  • 相关阅读:
    ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes
    大div套多个小div,怎样设置外div的高度自适应?
    搭建高可用rabbitmq集群及spring boot实现集群配置
    linux signal 处理
    freemarker null异常详解及兼容模式
    蓝绿部署、A/B测试以及灰度发布(金丝雀发布)
    动态BGP与静态BGP
    axios与ajax的区别及中文用户指南
    java poi excel给单元格增加批注(包含SXSSF)及设置列类型
    java图片处理(加水印、生成缩略图)等之Thumbnailator库
  • 原文地址:https://www.cnblogs.com/chao666/p/12097590.html
Copyright © 2020-2023  润新知