QueryString是URL中问号(?)后面的部分,用于在HTTP请求中传递参数。格式通常为key1=value1&key2=value2&...
。
urllib.parse
from urllib.parse import parse_qs, urlparse
# 示例URL
url = "http://example.com/path?name=John&age=30&hobbies=reading&hobbies=swimming"
# 解析URL获取查询字符串部分
parsed_url = urlparse(url)
query_string = parsed_url.query # 'name=John&age=30&hobbies=reading&hobbies=swimming'
# 解析查询字符串为字典
params = parse_qs(query_string)
print(params)
# 输出: {'name': ['John'], 'age': ['30'], 'hobbies': ['reading', 'swimming']}
cgi
(Python 3.11已弃用)import cgi
query_string = "name=John&age=30&hobbies=reading&hobbies=swimming"
params = cgi.parse_qs(query_string)
print(params)
from flask import Flask, request
app = Flask(__name__)
@app.route('/')
def index():
name = request.args.get('name') # 获取单个参数
age = request.args.get('age', type=int) # 带类型转换
hobbies = request.args.getlist('hobbies') # 获取多值参数列表
return f"Name: {name}, Age: {age}, Hobbies: {hobbies}"
if __name__ == '__main__':
app.run()
from django.http import HttpResponse
def index(request):
name = request.GET.get('name') # 获取单个参数
age = request.GET.get('age') # 获取单个参数
hobbies = request.GET.getlist('hobbies') # 获取多值参数列表
return HttpResponse(f"Name: {name}, Age: {age}, Hobbies: {hobbies}")
urllib.parse.quote()
和urllib.parse.unquote()
进行编码和解码。parse_qs
会返回列表,而parse_qsl
会返回元组列表。问题1:获取的参数值为None
request.args.get('param', default='default_value')
问题2:特殊字符处理不当
from urllib.parse import quote, unquote
encoded = quote("John Doe") # 'John%20Doe'
decoded = unquote("John%20Doe") # 'John Doe'
问题3:获取多值参数只得到第一个值
.get()
而不是.getlist()
.getlist()