Django - 获取请求参数的四种方式

  • 作者:lwj
  • 分类:Django
  • 发表日期:2021-09-23 20:21:35
  • 阅读(55)
  • 评论(0)

通常HTTP协议向服务器传参有几种途径

1. 查询字符串(query string), 形如key=value&keys=values
2. URL中的路径部分,如/users/2019,可以在服务器端的路由中用正则表达式截取
3. 请求体(body)中发送的数据, 比如form表单数据、json和xml等
4. http请求头(header)中

查询字符串参数

// 视图函数
def get_query_params(request):
    query_dict = request.GET
    key = query_dict.get('key')
    key_list = query_dict.getlist('keys')
    return HttpResponse(f"key={key}key_list={key_list}")

数据类型是 QueryDict,一个类似于字典的对象,包含HTTP GET的所有参数。

有相同的键,就把所有的值放到对应的列表里。

取值格式:对象.方法

get():返回字符串,如果该键对应有多个值,取出该键的最后一个值

getlist():返回列表,取出该键的所有值,为一个列表

请求结果如下图:


URL中的路径

直接通过路径中的正则提取,路由配置如下:提取say/开头a-z未知位数/四位数字

查询字符串不区分请求方式,客户端GET,POST方式的请求,都可以通过request.GET获取请求中的查询字符串数据

urlpatterns = [
    # http://127.0.0.1:8000/users/say/guangzhou/2021/
    url('^say/([a-z]+)/(\d{4})/$', views.say),
]

视图函数如下:

def say(request, city, year):
    return HttpResponse(f"{city} - {year}")

请求结果如下图:


请求体(body)

获取POST表单数据

数据类型是QueryDict,一个类似于字典的对象,包含HTTP POST的所有参数。

常用于form表单,form 表单里的标签  name 属性对应参数的键,value 属性对应参数的值

通过request.POST来获取

取值格式: 对象.方法。

get():返回字符串,如果该键对应有多个值,取出该键的最后一个值

// 视图函数
def get_form_date(request):
    query_dict = request.POST
    age = query_dict.get("age")
    like = query_dict.getlist('like')
    return HttpResponse(f"age={age}\nlike={like}")

请求结果如下图:

获取POST非表单数据

数据类型是二进制字节流,是原生请求体里的参数;

非表单类型的请求体数据, Django无法自动解析, 可以通过request.body属性获取最原始的请求体数据, 自己按照请求体格式(JSON、XML等)进行解析。request.body返回bytes类型;例如:二进制图片、XML、Json 等

// 视图函数
def get_json(request):
    json_dict = json.loads(request.body.decode())
    return HttpResponse(f"age={json_dict.get('age')}, like={json_dict.get('like')}")

请求结果如下图:


请求头

获取获取http请求头内容,使用request.META.get("header key")来获取;header的key必须大写,如果连接符是横线"-"要改成下划线"_"

// 视图函数
def get_headers(request):
    CONTENT_TYPE = request.META["CONTENT_TYPE"]
    return HttpResponse(f"CONTENT_TYPE={CONTENT_TYPE}")

请求结果如下图:

 

觉得不错,支持一下!

提交评论

您尚未登录,登录之后方可评论~ 登录 or 注册

评论列表

暂无评论
返回顶部

建议反馈

1. 可在博文底部留言评论

2. 发邮件到i_suichuan@163.com