Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Django代码中,在哪里放置代码断开信号并进行猴子修补?_Python_Django_Monkeypatching_Django Signals - Fatal编程技术网

Python 在Django代码中,在哪里放置代码断开信号并进行猴子修补?

Python 在Django代码中,在哪里放置代码断开信号并进行猴子修补?,python,django,monkeypatching,django-signals,Python,Django,Monkeypatching,Django Signals,我正在为Django 2.2开发自定义授权后端。我不希望django为用户更新last\u login,所以我想断开signaluser\u logged\u触发update\u last\u login 我还必须在SimpleJWT库中进行monkey补丁,将用户更改为指向其他用户模型 放置此代码的最佳位置是哪里?现在,我已经添加了CoreConfig.ready方法,它可以工作,但是它是这个逻辑的好地方吗 从django.apps导入AppConfig 类CoreConfig(AppConf

我正在为Django 2.2开发自定义授权后端。我不希望django为用户更新
last\u login
,所以我想断开signal
user\u logged\u
触发
update\u last\u login

我还必须在SimpleJWT库中进行monkey补丁,将用户更改为指向其他用户模型

放置此代码的最佳位置是哪里?现在,我已经添加了
CoreConfig.ready
方法,它可以工作,但是它是这个逻辑的好地方吗

从django.apps导入AppConfig
类CoreConfig(AppConfig):
名称='核心'
def就绪(自我):
从django.contrib.auth导入已登录的用户
从django.contrib.auth.models导入更新\上次登录
用户\u已登录。断开连接(更新\u上次登录,调度\u uid='update\u上次登录〕
导入rest\u framework\u simplejwt.state
rest\u framework\u simplejwt.state.User=OtherUserModel

我会说是的,但我认为这里没有明确的对错,关于连接信号,Django文档说明如下:

严格地说,信号处理和注册码都可以使用 任何你喜欢的地方,尽管建议避免 要最小化的应用程序根模块及其模型模块 导入代码的副作用

在实践中,信号处理程序通常在信号中定义 与之相关的应用程序的子模块。信号接收器是 在应用程序配置的ready()方法中连接 班如果您使用的是receiver()decorator,只需导入 信号子模块内部就绪()

我的意见是,如果建议的连接信号的方法是在您的
AppConfig
ready()
方法中进行连接,那么断开信号连接和相关的monkeypatching也应该在该方法中进行

我经常做的是:

  • 除了干扰默认信号/类之外,还有其他方法解决这个问题吗
  • 如果没有,请在AppConfig ready()方法中执行此代码
  • 编写一些单元测试或集成测试,以确保我的代码符合我的要求,即使在更新依赖项时也是如此