我有一个应用程序可以导入多个用户电子邮件地址并为它们创建帐户。为了让他们设置自己的密码,我尝试使用 django 的 PasswordResetForm(在 django.contrib.auth.forms 中)。创建用户帐户后立即调用密码重置:
def reset_password(person):
form = PasswordResetForm({'email': person.email})
if form.is_valid():
form.save(from_email='myname@myserver.com')
Run Code Online (Sandbox Code Playgroud)
除了包含执行此操作的单元测试之外,我还没有进一步进行测试:
import password_reset_module
class TestPasswordReset(TestCase):
def setUp(self):
p = Person(email='test@test.com')
def test_send(self):
password_reset_module.reset_password(p)
Run Code Online (Sandbox Code Playgroud)
没有断言,现在我只想通过监视我运行的控制台来查看是否有邮件发送:
python -m smtpd -n -c DebuggingServer localhost:1025
Run Code Online (Sandbox Code Playgroud)
保存表单调用 django 的 send_mail。运行测试用例时,send_mail 方法返回 1。但是,控制台中没有显示任何邮件。奇怪的是从django的交互式shell调用send_mail:
python manage.py shell
Run Code Online (Sandbox Code Playgroud)
工作正常。邮件显示在控制台中。在浏览器中单击忘记密码链接也会导致发送邮件。
我也试过基于文件的电子邮件后端无济于事。当前 settings.py 电子邮件设置:
EMAIL_USE_TLS = False
EMAIL_HOST = 'localhost'
DEFAULT_FROM_EMAIL = 'myname@myserver.com'
EMAIL_HOST_USER = ''
EMAIL_HOST_PASSWORD = ''
EMAIL_PORT = 1025
Run Code Online (Sandbox Code Playgroud)
现在想知道我在调用密码重置时是否遗漏了什么,或者手头是否存在邮件服务器配置问题?
我正在使用 .xml 处理大型 xml 文件lxml.iterparse。这很有效,但随着我的文件最近变得更大,我发现 iterparse 行为填满了我的记忆。考虑以下代码,该代码写入一个包含 300000 个元素和 300000 个elem元素和 300000 个other_elem元素的文件:
els = ('<elem><subel1>{0}</subel1><subel2>{0}</subel2><subel3>{0}</subel3><subel4>{0}</subel4><subel5>{0}</subel5><subel6>{0}</subel6></elem>'.format(x) for x in range(300000))
other_els = ('<other_elem><subel1>{0}</subel1><subel2>{0}</subel2><subel3>{0}</subel3><subel4>{0}</subel4><subel5>{0}</subel5><subel6>{0}</subel6></other_elem>'.format(x) for x in range(300000))
with open('/tmp/test.xml', 'w') as fp:
fp.write('<root>\n')
fp.write('<elements>\n')
for el in els:
fp.write(el+'\n')
fp.write('</elements>\n')
fp.write('<other_elements>\n')
for el in other_els:
fp.write(el+'\n')
fp.write('</other_elements>\n')
fp.write('</root>\n')
Run Code Online (Sandbox Code Playgroud)
然后我使用以下内容仅解析elem(而不对它们做任何事情),同时不时打印内存使用情况:
from lxml import etree
import psutil
import os
process = psutil.Process(os.getpid())
gen = etree.iterparse('/tmp/test.xml', tag='elem')
elscount = 0
for ac,el in gen:
elscount …Run Code Online (Sandbox Code Playgroud)