Django ——从request中获取前端数据

本文深入讲解了Django框架中Request对象的功能与用法,详细解释了如何通过Request对象获取前端传递的各种信息,包括HTTP头部信息、请求参数、Cookies及Session等。
部署运行你感兴趣的模型镜像

Django

###request

如果说 urls.py 是 Django 中前端页面和后台程序桥梁,那么 request 就是桥上负责运输的小汽车
可以说后端接收到的来至前端的信息几乎全部来自于requests中。

##request对象的属性

  • request.META

request.MATE获取的是一个标准的python字典。它包含了所有的HTTP请求信息

  • 1 CONTENT_LENGTH —— 请求的正文的长度(是一个字符串)。

  • 2 CONTENT_TYPE —— 请求的正文的MIME 类型。

  • 3 HTTP_ACCEPT —— 响应可接收的Content-Type。

  • 4 HTTP_ACCEPT_ENCODING —— 响应可接收的编码。

  • 5 HTTP_ACCEPT_LANGUAGE —— 响应可接收的语言。

  • 6 HTTP_HOST —— 客服端发送的HTTP Host 头部。

  • 7HTTP_REFERER —— Referring 页面。

  • 8 HTTP_USER_AGENT —— 客户端的user-agent 字符串。

  • 9 QUERY_STRING —— 单个字符串形式的查询字符串(未解析过的形式)。

  • 10 REMOTE_ADDR —— 客户端的IP 地址。

  • 11 REMOTE_HOST —— 客户端的主机名。

  • 12 REMOTE_USER —— 服务器认证后的用户。

  • 13 REQUEST_METHOD —— 一个字符串,例如"GET" 或"POST"。

  • 14 SERVER_NAME —— 服务器的主机名。

  • 15 SE0RVER_PORT —— 服务器的端口(是一个字符串)
    获取请求的源主机:HttpRequest.get_host()

  • request.scheme

请求的方式,即http或者是https

  • request.path

请求的路径,这里的路径是指相对路径,也就是说一个登陆后台页面的请求:http://127.0.0.1:8000/admin 的路径是 /admin
获取完整路径(包括参数):HttpRequest.get_full_path()
获取绝对url: HttpRequest.bulid_absolute_uri(location) 此参数默认为完整路径

  • request.encoding

请求提交的数据的编码方式

  • request.session

request.session 获取的是一个类似于字典的对象,可以进行读取写入操作,常用来保存一些数据来实现会话跟踪技术。因为 HTTP 是一个无状态,不连续的协议。如果想让服务器记住当前的访问对象,就需要记录请求者的一些信息来达到这个目的。

# 设置session
request.session["name"] = "root"
# 获取session
name = request.sessin["name"]

!!!说到这里需要提一下,django会默认为session使用json序列化。json序列化只能序列化一些基本数据类型,如数字,字符串,列表等。所以session不能直接存储对象.可以简单的在settings中添加 SESSION_SERIALIZER = "django.contrib.sessions.serializers.PickleSerializer"

  • request.COOKIES

与session类似,区别是cookies数据是保存在客户端,session数据是保存在服务端。相对而言session更安全,cookies在不同的浏览器上保存数据的大小限制也不同。但是,存在即合理。cooike自有它的好处这里不多说。

# 设置cookies
response.set_cookie('name','root')
# 设置加密cookies
response.set_cookie('passsword','123456',salt='@#$!%^&')
# 获取cookie
request.COOKIES.get("name")
# 获取加密的cookie
request.get_signed_cookie("password",salt="@#$!%^&")
  • request.method

请求方式 POST/GET…

####下面正式开始获取数据

就是在这里遇见了一些小问题,所以导致我写这篇文章来记录一下

  • request.body

请求的主体,返回的是一个字符串

  • request.data

请求的数据部分,返回的是一个字典对象(除此之外,与request.body是很类似的)

  • request.POST

获取post方式表单中提交的数据

request.POST["username"]
request.POST.get("username")
  • request.GET

获取get方式表单中或url提交的数据

request.GET["username"]
request.GET.get("username")

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

### Django 前端接收数据统一 JSON 格式解析方法 #### 使用 `JsonResponse` 发送 JSON 数据 为了确保从前端接收到的数据能以统一的 JSON 格式被处理,在 Django 中推荐使用内置的 `JsonResponse()` 函数来响应 AJAX 请求。此函数会自动设置正确的 MIME 类型 (`application/json`) 并序列化 Python 字典为 JSON 对象,使得前端可以直接获取并轻松地操作这些数据而无需额外解码[^3]。 ```python from django.http import JsonResponse def my_view(request): data = { 'key': 'value', # 更多键值对... } return JsonResponse(data) ``` #### 处理复杂结构的 JSON 数据 当涉及到更复杂的嵌套 JSON 结构时,Django 同样提供了强大的工具来进行有效的解析工作。对于来自表单或其他来源提交过来的深层级对象或数组形式的数据,可以通过递归遍历的方式逐一提取所需信息[^5]。 ```python import json from django.http import HttpResponseBadRequest, JsonResponse def parse_nested_json(json_data): result = {} try: parsed_data = json.loads(json_data) def traverse(obj, path=""): if isinstance(obj, dict): for k, v in obj.items(): new_path = f"{path}.{k}" if path else k traverse(v, new_path) elif isinstance(obj, list): for i, item in enumerate(obj): traverse(item, f"{path}[{i}]") else: result[path] = obj traverse(parsed_data) return JsonResponse(result) except ValueError as e: return HttpResponseBadRequest(f"Invalid JSON input: {e}") ``` 上述代码展示了如何定义一个辅助函数 `parse_nested_json` 来深入分析传入的 JSON 文本字符串,并将其转换成扁平化的字典表示以便于进一步的操作和展示[^2]。 #### 客户端 JavaScript 接收与解析 在客户端方面,一旦成功发起 AJAX 调用并且服务器返回了预期中的 JSON 序列化后的结果,则可以利用现代浏览器提供的原生支持——即直接通过 `.then(response => response.json())` 或者 jQuery 的相应 API 获取到已经完成反序列化的 JavaScript 对象实例[^1]。 ```javascript fetch('/api/endpoint/', { method: 'GET', // POST, PUT etc. }) .then((response) => response.json()) .then((data) => console.log('Success:', data)) .catch((error) => console.error('Error:', error)); ```
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值