Django 获取请求参数的完整指南:URL、Query、Body 与 Header

云舒
云舒
发布时间:2026-10-12| 1人浏览过
原创

本文详解Django中获取HTTP请求参数的多种方法。涵盖通过正则表达式提取URL路径参数、利用request.GET处理查询字符串及QueryDict对象的get与getlist方法、区分表单与非表单类型请求体的解析策略,以及通过request.META获取请求头数据。同时说明CSRF中间件对POST/PUT等请求的影响及测试时的关闭方法。

1 URL路径参数

在配置路由URL时,可利用正则表达式从URL中提取参数,Django会自动将提取到的参数传递给视图函数的对应参数中。

未命名参数按定义顺序传递,例如:

url(r'^index/([a-z]+)/(\d{4})/$', views.index),

def index(request, parameter1, parameter2):
  print(parameter1)
  print(parameter2)
  return HttpResponse('OK')

若使用命名参数,则按名称传递,例如:

url(r'^index/(?P<parameter1>[a-z]+)/(?P<parameter2>\d{4})/$', views.index),

def index(request, parameter1, parameter2):
  print(parameter1)
  print(parameter2)
  return HttpResponse('OK')

2、 查询字符串Query String

获取URL路径中的查询字符串参数,可通过request.GET属性实现,该属性返回一个QueryDict对象。

# /q/?a=2&b=3&a=4

def q(request):
  a = request.GET.get('a')
  b = request.GET.get('b')
  alist = request.GET.getlist('a')
  print(a) # 4
  print(b) # 3
  print(alist) # ['2', '4']
  return HttpResponse('OK')
 

2、 QueryDict对象

HttpRequest对象的GET和POST属性均属于QueryDict类型。

方法get():依据键名获取对应的值。

当某个键对应多个值时,该方法默认返回最后一个值。

若键不存在,则返回None,此时可设置默认值以便进行后续逻辑处理。

dict.get('键',默认值)
可简写为
dict['键']

方法getlist():依据键名获取值,并以列表形式返回,适用于获取指定键的所有值。

若键不存在,则返回空列表[],同样支持设置默认值以进行后续处理。

dict.getlist('键',默认值)

3、 请求体

请求体的数据格式并不固定,可能为表单类型字符串、JSON字符串或XML字符串等,需根据具体格式区别处理。

常见的HTTP方法包括POST、PUT、PATCH和DELETE。

Django默认启用了CSRF(跨站请求伪造)防护,会对上述请求方式执行CSRF验证。在测试阶段,可通过注释settings.py文件中的CSRF中间件来关闭此防护机制,例如:

4、 表单类型 Form Data

前端发送的表单格式请求体数据,可通过request.POST属性获取,返回结果为QueryDict对象。

def body(request):
  a = request.POST.get('a')
  b = request.POST.get('b')
  alist = request.POST.getlist('a')
  print(a)
  print(b)
  print(alist)
  return HttpResponse('OK')

5、非表单类型 Non-Form Data

对于非表单类型的请求体数据,Django无法自动解析,此时可通过request.body属性获取原始的请求体数据。

import json

def body_json(request):
  json_str = request.body
  json_str = json_str.decode() # python3.6 无需这步
  data = json.loads(json_str)
  print(data['a'])
  print(data['b'])
  return HttpResponse('OK')

6、请求头

可通过request.META属性获取请求头headers中的相关数据。

def headers(request):
  print(request.META['SERVER_PORT'])
  return HttpResponse('OK')

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。