zoukankan      html  css  js  c++  java
  • 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)
    该花的钱要花,该吃的饭要吃。
  • 相关阅读:
    宿主机( win 7 系统) ping 虚拟机VMware( cent os 6.6 ) 出现“请求超时”或者“无法访问目标主机”的解决方法
    Java实现 LeetCode 23 合并K个排序链表
    Java实现 LeetCode 23 合并K个排序链表
    Java实现 LeetCode 23 合并K个排序链表
    Java实现 LeetCode 22 括号生成
    Java实现 LeetCode 22 括号生成
    Java实现 LeetCode 22 括号生成
    Java实现 LeetCode 21 合并两个有序链表
    Java实现 LeetCode 21 合并两个有序链表
    Java实现 LeetCode 21 合并两个有序链表
  • 原文地址:https://www.cnblogs.com/chao666/p/12097590.html
Copyright © 2011-2022 走看看