我正在使用名为“django simple captcha”的python包,它允许您通过在设置文件中设置CAPTCHA_FONT_PATH
来更改用于生成验证码图像的字体。但是,我希望动态更改CAPTCHA_FONT_PATH
,每次运行验证码,并在我的views.py
中调用
import captcha.conf;
...
captcha.conf.settings.CAPTCHA_FONT_PATH = BASE_DIR + '/fonts/' + random.choice(cfonts)
但是,它只是偶尔更新验证码实际上因某些未知原因而使用的CAPTCHA_FONT_PATH
。有时它会更新,有时它不会更新(与random.choice调用完全无关,顺便说一句)。对于上述情况,我也尝试使用setattr
,但行为没有变化。
CAPTCHA_FONT_PATH
只能在名为views.py
的函数的captcha_image
文件中由验证码访问:
from captcha.conf import settings
...
font = ImageFont.load(settings.CAPTCHA_FONT_PATH)
以及它自己的settings.py
:
from django.conf import settings
...
CAPTCHA_FONT_PATH = getattr(settings, 'CAPTCHA_FONT_PATH'...)
一般来说,还有一些我对settings.py不了解的事情。
Django 1.8 (mod_wsgi 4.2.8/Python 2.7)
编辑:我并不完全确定它与设置有关,因为有时我无法判断某些captcha_image
是否每次迭代都被调用,但不知道为什么它不会。也许有人熟悉这个软件包。
答案 0 :(得分:0)
如果此行位于您的模块顶部
captcha.conf.settings.CAPTCHA_FONT_PATH = BASE_DIR + '/fonts/' + random.choice(cfonts)
然后在加载views.py时加载一次,而不是每次运行视图时加载。您需要将该行移动到视图中,以便在每次视图运行时重新生成它。
请注意,Django不鼓励altering settings at runtime。你的情况略有不同,因为你正在改变captcha.conf.settings
,但它仍然看起来有点奇怪。理想情况下,我猜你会改变 django simple captcha ,这样你就可以为字体路径定义一个callable而不需要一个常量。