在HTTP协议中,向服务器传递参数主要有以下几种途径:
URL参数:这是最常见的方式,将参数直接添加到URL的查询字符串中。例如:http://example.com/page?param1=value1¶m2=value2
# 子应用
# urls.py
from django.urls import path
from users.views import *
urlpatterns = [
# url 路径参数
path('<cat_id>/<goods_id>/', goods),
# url ?号传参
path('querydict/', goods1)
]
# views.py
from django.http import HttpResponse, JsonResponse
def goods(request, cat_id, goods_id):
"""
cat_id, goods_id,从路由传来一一对应,不能写错
"""
return JsonResponse({"cat_id": cat_id, "good_id": goods_id})
def goods1(request):
"""
127.0.0.1:8000/querydict/?cat_id=2023&goods_id=10&cat_id=2034
url传参,?号传参,不安全
"""
goods_id = request.GET.get("goods_id")
cat_id = request.GET.getlist("cat_id") # 可以处理一键多值
return JsonResponse({"cat_id": cat_id, "good_id": goods_id})
# demo1
127.0.0.1:8000/2023/10
{
"cat_id": "2023",
"good_id": "10"
}
# demo2
127.0.0.1:8000/querydict/?cat_id=2023&goods_id=10&cat_id=2034
{
"cat_id": [
"2023",
"2034"
],
"good_id": "10"
}
表单提交:当表单需要用户输入数据并提交时,可以使用表单的method
属性将数据以POST或GET方式发送到服务器。如果是POST方法,数据会放在HTTP请求体中。如果是GET方法,数据会添加到URL的查询字符串中。
path('formdata/', goods_post),
def goods_post(request):
"""
前端发送的表单类型的请求体数据,可以通过request.POST属性获取,返回QueryDict对象。
"""
cat_id = request.POST.get("cat_id")
goods_id = request.POST.get("goods_id")
cat_ids = request.POST.getlist("cat_id") # 可以处理一键多值
return JsonResponse({"cat_id": cat_id, "good_id": goods_id, "cat_ids": cat_ids})
HTTP请求体:当使用POST或PUT方法时,可以将参数放在HTTP请求体中发送给服务器。这通常用于发送较大的数据量或非简单类型的数据,如JSON或表单数据。
# 非表单
path('notformdata/', not_form_data),
def not_form_data(request):
"""
获取json数据
"""
import json
body = request.body
json_body = json.loads(body)
print(json_body['a'])
print(json_body['b'])
return JsonResponse({'a': json_body['a'], 'b': json_body['b']})
Cookie:Cookie是一种将参数存储在客户端的技术,通常用于保持用户的会话状态或个性化设置。Cookie可以包含在HTTP请求头中发送给服务器。
自定义头(Custom Headers):虽然不是传递参数的常见方式,但HTTP允许您在请求或响应中添加自定义头。这可以用于传递自定义设置或元数据。
WebSocket:WebSocket是一种实现双向通信的协议,允许服务器和客户端之间实时传递数据。它不局限于传递参数,但可以用于实现复杂的应用程序。