HTTP请求向服务器传参方式
2021-03-03 02:26
标签:编写 重要 部分 自己 comment att efault block ade 提示: 回想一下,利用HTTP协议向服务器传参有几种途径? 为了演示请求和响应,我们会新建一个子应用 提示: 重要提示: 提示: 前端发送的表单类型的请求体数据,可以通过 重要提示: 提示: 需求: 可以进行如下方法操作: 提示: 需求: 实现需求1 重要提示: 思考: 结论: 默认的路由转换器: 实现需求2 问题: 解决方案: 实现需求2:自定义路由转换器 比如:在工程根目录下,新建 注册自定义路由转换器 在总路由中,注册自定义路由转换器 使用自定义路由转换器 可以通过 常见的请求头如: 具体使用如: HTTP请求向服务器传参方式 标签:编写 重要 部分 自己 comment att efault block ade 原文地址:https://www.cnblogs.com/wwr3569/p/14295779.html请求HttpRequest
?key1=value1&key2=value2
http://www.meiduo.site/list/115/1/?sort=price
中的?sort=price
http://www.meiduo.site/detail/2/
中的/2/
request_response
去演示相关内容1. 提取查询字符串数据
?k1=v1&k2=v2
request.GET
属性获取,并返回QueryDict类型的对象# 注册总路由
urlpatterns = [
# 用户模块:http://127.0.0.1:8000/users/register/
path(‘‘, include(‘users.urls‘)),
# 请求和响应
path(‘‘, include(‘request_response.urls‘)),
]
# 注册子路由
urlpatterns = [
# 测试提取查询字符串参数:http://127.0.0.1:8000/querystring/?name=zxc&age=18
path(‘querystring/‘, views.QSParamView.as_view()),
]
class QSParamView(View):
"""测试提取查询字符串参数
http://127.0.0.1:8000/querystring/?name=zxc&age=18
"""
def get(self, request):
# 获取查询字符串参数name、age
name = request.GET.get(‘name‘, ‘小明‘)
age = request.GET.get(‘age‘, ‘0‘)
return http.HttpResponse(‘查询字符串参数:%s--%s‘ % (name, age))
QueryDict
补充:
QueryDict
是由Django自己封装的一个数据类型,继承自python的字典Dictdjango.http.QueryDict
中
QueryDict
的使用:
# 如果键不存在则返回None值,可以设置默认值进行后续处理
query_dict.get(‘键‘,默认值)
# 可简写为:
query_dict[‘键‘]
2. 提取请求体数据
表单类型数据和JSON字符串类型
,我们应区别对待2.1 表单类型请求体数据(Form Data)
request.POST
属性获取,并返回QueryDict对象。# 测试提取表单类型请求体数据:http://127.0.0.1:8000/formdata/
path(‘formdata/‘, views.FormDataParamView.as_view()),
class FormDataParamView(View):
"""测试提取表单类型请求体参数
http://127.0.0.1:8000/formdata/
"""
def post(self, request):
# 获取表单类型请求体参数中的username、password
username = request.POST.get(‘username‘)
password = request.POST.get(‘password‘)
return http.HttpResponse(‘表单类型请求体参数:%s--%s‘ % (username, password))
request.POST
只能用来获取POST表单发送的请求体数据2.2 非表单类型请求体数据(Non-Form Data):JSON
request.body
属性获取最原始的请求体数据request.body
获取的是bytes类型
的请求体原始数据
{
"username": "张小厨",
"password": "123"
}
# 测试提取非表单类型请求体参数:http://127.0.0.1:8000/json/
path(‘json/‘, views.JSONParamView.as_view()),
import json
class JSONParamView(View):
"""测试提取非表单类型请求体参数
http://127.0.0.1:8000/json/
"""
def post(self, request):
# 获取请求体中原始的JSON数据
json_str = request.body
# 使用json模块将原始的JSON数据转字典
json_dict = json.loads(json_str)
# 提取JSON数据中的参数
username = json_dict.get(‘username‘)
password = json_dict.get(‘password‘)
return http.HttpResponse(‘非表单类型请求体参数:%s--%s‘ % (username, password))
3. URL路径参数:提取URL路径中的特定部分数据
http://127.0.0.1:8000/url_param1/18/
18
http://127.0.0.1:8000/url_param2/18500001111/
18500001111
3.1 path()提取路径参数
# 测试path()提取普通路径参数:http://127.0.0.1:8000/url_param1/18/
path(‘url_param1//‘, views.URLParam1View.as_view()),
class URLParam1View(View):
"""测试path()提取普通路径参数
http://127.0.0.1:8000/url_param1/18/
"""
def get(self, request, age):
"""
:param age: 路由提取的关键字参数
"""
return http.HttpResponse(‘测试path()提取普通路径参数:%s‘ % age)
是什么?
django.urls.converters.py
DEFAULT_CONVERTERS = {
‘int‘: IntConverter(), # 匹配正整数,包含0
‘path‘: PathConverter(), # 匹配任何非空字符串,包含了路径分隔符
‘slug‘: SlugConverter(), # 匹配字母、数字以及横杠、下划线组成的字符串
‘str‘: StringConverter(), # 匹配除了路径分隔符(/)之外的非空字符串,这是默认的形式
‘uuid‘: UUIDConverter(), # 匹配格式化的uuid,如 075194d3-6885-417e-a8a8-6c931e272f00
}
http://127.0.0.1:8000/url_param2/18500001111/
18500001111
converters.py
文件,用于自定义路由转换器class MobileConverter:
"""自定义路由转换器:匹配手机号"""
# 匹配手机号码的正则
regex = ‘1[3-9]\d{9}‘
def to_python(self, value):
# 将匹配结果传递到视图内部时使用
return int(value)
def to_url(self, value):
# 将匹配结果用于反向解析传值时使用
return str(value)
from django.urls import register_converter
from converters import MobileConverter
# 注册自定义路由转换器
# register_converter(自定义路由转换器, ‘别名‘)
register_converter(MobileConverter, ‘mobile‘)
urlpatterns = []
# 测试path()中自定义路由转换器提取路径参数:手机号 http://127.0.0.1:8000/url_param2/18500001111/
path(‘url_param2/
class URLParam2View(View):
"""测试path()中自定义路由转换器提取路径参数:手机号
http://127.0.0.1:8000/url_param2/18500001111/
"""
def get(self, request, phone_num):
"""
:param phone_num: 路由提取的关键字参数
"""
return http.HttpResponse(‘测试path()提取路径参数手机号:%s‘ % phone_num)
3.2 re_path()提取路径参数
# 测试re_path()提取路径参数:http://127.0.0.1:8000/url_param3/18500001111/
re_path(r‘^url_param3/(?P
class URLParam3View(View):
"""测试re_path()提取路径参数
http://127.0.0.1:8000/url_param3/18500001111/
"""
def get(self, request, phone_num):
"""
:param phone_num: 路由提取的关键字参数
"""
return http.HttpResponse(‘测试re_path()提取路径参数:%s‘ % phone_num)
3.3 path()和re_path()如何选择?
4. 请求头
request.META
属性获取请求头headers中的数据,request.META
为字典类型。
CONTENT_LENGTH
– The length of the request body (as a string).CONTENT_TYPE
– The MIME type of the request body.HTTP_ACCEPT
– Acceptable content types for the response.HTTP_ACCEPT_ENCODING
– Acceptable encodings for the response.HTTP_ACCEPT_LANGUAGE
– Acceptable languages for the response.HTTP_HOST
– The HTTP Host header sent by the client.HTTP_REFERER
– The referring page, if any.HTTP_USER_AGENT
– The client’s user-agent string.QUERY_STRING
– The query string, as a single (unparsed) string.REMOTE_ADDR
– The IP address of the client.REMOTE_HOST
– The hostname of the client.REMOTE_USER
– The user authenticated by the Web server, if any.REQUEST_METHOD
– A string such as "GET"
or "POST"
.SERVER_NAME
– The hostname of the server.SERVER_PORT
– The port of the server (as a string).class HeadersParamView(View):
"""测试提取请求头参数"""
def get(self, request):
# 获取请求头中文件的类型
ret = request.META.get(‘CONTENT_TYPE‘)
return http.HttpResponse(‘OK‘)
5. 其他常用HttpRequest对象属性
上一篇:vue.js的安装