Django2.0下修改venv中fcm-django源码后未生效的问题咨询
is_authenticated()引发的'bool' object is not callable错误及修改不生效问题 首先得揪出一个明显的小失误——你提到把is_authenticated()改成了is_aunthenticated,这里拼写错了!正确的属性名是is_authenticated(是authenticated,不是aunthenticated),这个拼写错误会导致代码完全找不到正确的属性,自然还是会触发报错。
接下来分析为什么你修改了文件却没生效,可能有这几个原因:
你修改的不是项目实际加载的文件
有时候我们可能会搞错虚拟环境的路径,你可以在项目的虚拟环境里运行这条命令,确认fcm-django包的实际位置:python -c "import fcm_django; print(fcm_django.__file__)"把输出的路径和你修改的
/home/test/venv/lib/python3.6/site-packages/fcm_django/对比一下,确保是同一个目录。如果路径不对,那你的修改根本没作用到项目用的包上。Python模块缓存没更新
Django开发服务器或者生产环境的进程会缓存已经加载的模块,哪怕你修改了文件,正在运行的进程不会自动读取新内容。解决方法很简单:- 如果是本地开发,完全关闭Django服务器,再重新启动它;
- 如果是生产环境(比如用Gunicorn、uWSGI),必须重启对应的服务进程才能让修改生效。
还有其他地方存在
is_authenticated()调用
你只修改了rest_framework.py,但fcm-django的其他文件里可能也有同样的错误调用。可以在虚拟环境的fcm-django目录下全局搜索:grep -r "is_authenticated()" /home/test/venv/lib/python3.6/site-packages/fcm_django/把所有搜索到的结果都改成无括号的
is_authenticated,确保没有遗漏。额外建议:尝试升级fcm-django
虽然你说0.2.13没修复这个问题,但说不定之后的版本已经适配了Django 2.0的变化。可以试试直接升级包:pip install --upgrade fcm-django这样就不用手动改源码,一劳永逸解决兼容问题。
按上面的步骤排查,先修正拼写错误,再确认文件路径和缓存问题,应该就能解决你的报错了。
内容的提问来源于stack exchange,提问作者Santhosh

