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  一致?(待确认)

 

posted @ 2022-04-11 22:33  火灵儿  阅读(488)  评论(0)    收藏  举报