python-Django 遇到的问题总结(一)
一、使用JsonResponse 返回json对象时,页面显示成unicode编码( 类似 \u4f60 问题)
解决方案:
在 返回JsonResponse 对象中指定json_dumps_params 参数值为:{'ensure_ascii': False}
json_dumps_params = {'ensure_ascii': False}
return JsonResponse(response, json_dumps_params=json_dumps_params)
二、在指定返回错误时,如果指定msg为Exception 类的对象,则在调用接口时报如下错误。
raise TypeError(f'Object of type {o.__class__.__name__} '
TypeError: Object of type Exception is not JSON serializable
分析:
出现以上异常的问题代码来自代码:
response['msg'] = Exception('year 参数值不能为空!!') # 对需要返回至前端的字典值,我使用Exception类来记录 response['code'] = 20001
解决方案:
# 第一步:自定义一个类MyEncoder
class MyEncoder(json.JSONEncoder): """ 自定义一个类:用于json转换编码,解决TypeError: Object of type xxx is not JSON serializable这个问题 """ def default(self, obj): if isinstance(obj, bytes): return str(obj, encoding='utf-8') elif isinstance(obj, Exception): return obj.__str__().encode(encoding='utf-8') # 如果obj对象是Exception对象,则转换为字符串,且设置编码为:utf-8 else: return super(MyEncoder, self).default(obj) # 第二步: 在view处理函数中,指定 encoder参数值为:MyEncoder
return JsonResponse(response, encoder=MyEncoder, json_dumps_params=json_dumps_params)
三、项目包.urls.py模块中使用include ,指定namespace 参数值后, 报异常
解决方案:
path('dev-api/book/', include(('book.urls', 'book'), namespace='book')) # 在include中指定的应用urls,同时要加入namespace的值。关键代码:('book.urls', 'book')
四、在使用CBV模式(类视图)编写视图处理逻辑时,处理方法中的参数 request 是否与 self.request 一致?(待确认)

浙公网安备 33010602011771号