Become a sponsor

说明
utils/common.py 提供请求数据解析相关的工具函数,核心函数 parse_request_body() 用于解析请求体 JSON 数据。这些工具函数在各业务模块中广泛使用。
解析请求体 JSON 数据,返回 (data, error) 元组。这是业务模块中最常用的请求解析函数。
# utils/common.py
def parse_request_body(request):
"""
解析请求体JSON数据
Args:
request: HttpRequest对象
Returns:
tuple: (data, error)
成功时 data 为解析后的字典,error 为 None
失败时 data 为 None,error 为错误描述字符串
"""
try:
if not hasattr(request, 'body') or request.body is None:
return None, None
if not request.body:
return None, "参数不能为空"
json_data = request.body.decode('utf-8')
if not json_data:
return None, "参数不能为空"
data = json.loads(json_data)
return data, None
except json.JSONDecodeError as e:
return None, "参数格式错误"
except UnicodeDecodeError as e:
return None, "参数编码错误"
except Exception as e:
return None, "参数处理失败"使用示例:
def add_example(request):
# 解析请求参数
data, error = parse_request_body(request)
if error:
return R.failed(msg=error)
# 使用解析后的数据
name = data.get('name')
status = data.get('status')
# ...温馨提示
parse_request_body() 返回元组 (data, error),成功时 data 为字典、error 为 None;失败时 data 为 None、error 为错误描述字符串。调用方应先检查 error 再使用 data。
Django 中获取 GET 查询参数使用 request.GET:
def get_example_page(request):
# 获取分页参数
page_no = int(request.GET.get('pageNo', 1))
page_size = int(request.GET.get('pageSize', PAGE_SIZE))
# 获取筛选参数
name = request.GET.get('name')
status = request.GET.get('status')
if name:
queryset = queryset.filter(name__contains=name)
if status:
queryset = queryset.filter(status=status)获取 POST 表单数据使用 request.POST:
def upload_file(request):
# 获取上传的文件
file = request.FILES.get('file')
# 获取表单字段
field_name = request.POST.get('name', '')获取上传文件使用 request.FILES:
file = request.FILES.get('file')
if file:
original_name = file.name # 原始文件名
file_size = file.size # 文件大小
# 分块读取文件内容
for chunk in file.chunks():
f.write(chunk)utils/regular.py 中的 get_err() 函数用于提取 Django 表单验证错误信息:
# utils/regular.py
def get_err(form):
"""
获取表单错误文本,多个错误用'/'分隔
使用示例:
form = UserForm(data)
if not form.is_valid():
error_msg = get_err(form)
return R.failed(msg=error_msg)
"""
error_list = []
for item in form.errors.get_json_data().values():
error_list.append(item[0].get('message'))
return '/'.join(error_list)format_params() 函数将请求参数格式化为 JSON 字符串,自动过滤敏感字段:
# utils/common.py
def format_params(params):
"""
格式化请求参数,自动过滤密码等敏感字段
敏感字段值替换为 '******'
"""
sensitive_fields = ['password', 'old_password', 'new_password', 'confirm_password']
if isinstance(params, dict):
params_copy = params.copy()
for field in sensitive_fields:
if field in params_copy:
params_copy[field] = '******'
return json.dumps(params_copy, ensure_ascii=False)
return json.dumps(params, ensure_ascii=False)# utils/common.py
def format_datetime(dt, format_str='%Y-%m-%d %H:%M:%S'):
"""格式化日期时间对象为字符串"""
return dt.strftime(format_str) if dt else None请求解析工具函数覆盖了 JSON 请求体解析、GET/POST 参数获取、文件上传、表单验证错误提取等常见场景。parse_request_body() 是最核心的函数,返回 (data, error) 元组,调用方应先检查错误再使用数据。get_err() 将 Django 表单验证错误转换为可读字符串。