AssertionError: .accepted_renderer not set on Response

出错原因,没有在合法的方法内使用 response 响应,之前在dispatch内直接return 了,导致报错,return response 必须放在 get post 等方法内。

按道理讲,django视图会先经过dispatch分发,如果我们在分发的时候发现权限问题,那么提前响应应该没问题,那么为啥会报错呢?

报错信息显示accepted_renderer没有在Response内设定,找一下源码,如下(具体原因都在下面代码后面的注释里了):

def dispatch(self, request, *args, **kwargs):
"""
`.dispatch()` is pretty much the same as Django's regular dispatch,
but with extra hooks for startup, finalize, and exception handling.
"""
self.args = args
self.kwargs = kwargs
request = self.initialize_request(request, *args, **kwargs)
self.request = request
self.headers = self.default_response_headers # deprecate? try:
self.initial(request, *args, **kwargs) # Get the appropriate handler method
if request.method.lower() in self.http_method_names:
handler = getattr(self, request.method.lower(),
self.http_method_not_allowed)
else:
handler = self.http_method_not_allowed response = handler(request, *args, **kwargs)    # 这里发现了,请求响应是在dispatch方法内部完成的,响应也是dispatch代为返回的,到这里也没问题,问题在下面。 except Exception as exc:
response = self.handle_exception(exc) self.response = self.finalize_response(request, response, *args, **kwargs)    # 在响应之前,dispatch对视图方法返回的响应又加工了一次
return self.response def finalize_response(self, request, response, *args, **kwargs):
"""
Returns the final response object.
"""
# Make the error obvious if a proper response is not returned
assert isinstance(response, HttpResponseBase), (
'Expected a `Response`, `HttpResponse` or `HttpStreamingResponse` '
'to be returned from the view, but received a `%s`'
% type(response)
) if isinstance(response, Response):
if not getattr(request, 'accepted_renderer', None):
neg = self.perform_content_negotiation(request, force=True)
request.accepted_renderer, request.accepted_media_type = neg response.accepted_renderer = request.accepted_renderer      # 这里,Response 会定义一个属性 accepted_renderer,也就是说,视图响应的不仅仅是一个 Response,而是加工过的Response,所以如果在dispatch内直接响应Response,就是跳过了后面加工哪一步,就会报错。
response.accepted_media_type = request.accepted_media_type
response.renderer_context = self.get_renderer_context() for key, value in self.headers.items():
response[key] = value return response

  

  

django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.

出错原因,两个,第一,相关包没有安装或者版本有问题;第二,在不合适的地方使用了项目的model模型,版本不同情况不一样。

XXX doesn't declare an explicit app_label and either isn't in an application in INSTALLED_APPS or else was imported before its application was loaded. This will no longer be supported

出错原因,在不合适的地方导用了model,如本次是在 app.__init__.py中导入本app的model导致的

虚拟环境中,Python库的安装直接使用pip安装,不用加sudo,不然项目没有权限使用该库,会导致出现 Apps aren't loaded yet.

最新文章

  1. DevExtreme 学习应用[2]
  2. 使用zabbix邮件发送报表
  3. C#遍历文件夹及文件
  4. IntelliJ IDEA14 配置 SVN
  5. 判断 0 和 '' 以及 empty null false的关系
  6. 孙鑫视频学习:“operator +=” 不明确的问题解决方法
  7. Android深入浅出之Binder机制
  8. 【CodeVS 1014】装箱问题
  9. jquery学习以及下载链接
  10. 【MySQL】囧,mysql忘记用户密码
  11. UVA 11584
  12. Javascript获取不重复的随机数值
  13. SpringMVC拦截器Interceptor
  14. linux 编译安装PHP模块
  15. Linux 基础学习:文件权限与种类
  16. linux 搭建testlink的问题总结
  17. QMD ST表 倍增
  18. # 2019-2020.3 《java程序设计》第一周学习总结
  19. Easy Way to Get All Dependent Library Names 快速获得所有依赖库名称
  20. Rpgmakermv(24 )yep_coreengine

热门文章

  1. 基于BP神经网络的简单字符识别算法自小结(C语言版)
  2. hdu 3068 最长回文 【Manacher求最长回文子串,模板题】
  3. PIO Core
  4. Python3小白初体验
  5. Ionic2集成ngx-datatable,ng2-tree第三方控件.md
  6. window安装MQTT服务器和client
  7. Linux 终端仿真程序Putty
  8. [Usaco2009 Feb]Stock Market 股票市场 完全背包
  9. pwd---以绝对路径的方式显示用户当前工作目录
  10. Python 爬取单个网页所需要加载的地址和CSS、JS文件地址