Google Cloud上Django重置密码报OSError[101]网络不可达求助
Django云端重置密码功能触发网络不可达错误解决方案
问题现象
在Google Cloud部署的Django项目中,使用内置密码重置功能时云端触发如下错误:
OSError at /en/reset_password/ [Errno 101] Network is unreachable Request Method: POST Request URL: http://04.198.88.75:8000/en/reset_password/ Django Version: 5.0.3 Exception Type: OSError Exception Value: [Errno 101] Network is unreachable Exception Location: /usr/lib/python3.10/socket.py, line 833, in create_connection Raised during: django.contrib.auth.views.PasswordResetView Python Executable: /home/rsa-key-20240516/env/SlangID/bin/python Python Version: 3.10.12 Python Path: ['/var/www/html/SlangID/src', '/usr/lib/python310.zip', '/usr/lib/python3.10', '/usr/lib/python3.10/lib-dynload', '/home/rsa-key-20240516/env/SlangID/lib/python3.10/site-packages'] Server time: Sun, 02 Jun 2024 11:55:50 +0000
本地环境功能正常,已添加允许SMTP连接的防火墙规则,ping 8.8.8.8、telnet smtp.gmail.com 587测试均成功,但通过Django shell查看EMAIL_PORT为默认值25,而settings.py中误写为EMAIL_POST=587。
相关代码
密码重置URL配置
from django.contrib.auth import views as auth_views # Forgot Password Paths path('reset_password/', auth_views.PasswordResetView.as_view( template_name='forgot_pass/change_password.html', success_url=reverse_lazy('password_reset_done'), ), name="password_reset" ), #1 path('reset_password/done/', auth_views.PasswordResetDoneView.as_view(template_name='forgot_pass/sent_email.html'), name="password_reset_done"), #2 path('reset/<uidb64>/<token>/', auth_views.PasswordResetConfirmView.as_view( template_name='forgot_pass/reset_pass.html', success_url=reverse_lazy('password_reset_complete'), ), name="password_reset_confirm" ), #3 path('reset_password_complete/', auth_views.PasswordResetCompleteView.as_view( template_name='forgot_pass/complete_pass.html', ), name="password_reset_complete" ), #4
邮件配置(错误版本)
EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend" EMAIL_HOST = 'smtp.gmail.com' EMAIL_POST = 587 EMAIL_USE_TLS = True EMAIL_HOST_USER ='sussy@gmail.com' EMAIL_HOST_PASSWORD ='aaaa aaaa aaaa aaaa'
解决方案
- 修正配置拼写错误:将settings.py中的
EMAIL_POST=587修改为正确的EMAIL_PORT=587 - 重启应用:重启Django服务或应用进程,确保新配置生效
- 验证配置:进入Django shell执行以下命令确认端口设置正确:
from django.conf import settings print(settings.EMAIL_PORT) # 应输出587 - Gmail SMTP额外检查:若使用Gmail作为邮件服务器,账号开启两步验证需使用应用专用密码替代普通密码;未开启两步验证则需开启「不太安全的应用访问」(或通过Google Workspace配置应用权限)
内容的提问来源于stack exchange,提问作者Gizmo Hey
相关产品推荐
相关产品推荐

