Django报错module 'accounts.views' has no attribute 'signup'怎么解决?
报错原因
- 导入指向错误:你在
myblog/urls.py中导入的是accounts应用的views模块,但你实现的signup、activate函数实际存放在myblog应用的views.py中,调用时自然找不到对应属性 - 应用职责错位:
accounts应用的设计定位就是处理用户认证相关逻辑,你目前把用户注册、邮箱激活的代码放到了处理博客内容的myblog应用中,不符合Django的应用拆分规范,IDE的提示是正确的。
解决方案
快速修复(仅解决当前报错,不调整代码结构)
修改myblog/urls.py的导入逻辑即可:
- 将
signup、activate加入当前应用的views导入列表 - 删除多余的
from accounts import views导入语句
修改后的导入代码如下:
from django.urls import path # 删掉原来的 from accounts import views from .views import ( BlogListView, BlogDetailView, BlogCreateView, BlogUpdateView, BlogDeleteView, BlogCommentView, signup, activate, )
路由部分不用修改,直接就能正常运行。
规范修复(符合Django开发规范,推荐)
更推荐用这个方案,方便后续代码维护
- 代码迁移:把
myblog/views.py里的signup、activate两个函数的全部代码剪切到accounts/views.py中 - 表单迁移:把
myblog/forms.py里的SignUpForm类代码剪切到accounts应用的forms.py中(如果没有就新建该文件) - 依赖调整:在
accounts/views.py中补充对应的导入语句,比如邮箱发送、token生成、SignUpForm相关的导入 - 导入调整:
myblog/urls.py保留from accounts import views的导入即可,不需要把signup、activate加入当前应用的导入列表 - 可选优化:注册是全局功能,和具体博客文章无关,建议把注册路由移到
accounts/urls.py中,路径改为/accounts/signup/更符合通用设计规范。
新手学习建议
- 优先学习Django官方文档的用户认证模块,步骤清晰逻辑严谨,跟着走一遍就能掌握基础的注册、登录、权限控制逻辑
- 可以找入门级Django实战教程的用户模块部分练习,一般都会包含邮箱验证的完整实现,实操2次就能理清整个流程
- 国内的Django社区的新手实战内容,很多会针对国内常用邮箱(QQ邮箱、163邮箱等)做配置适配,可以避开国外教程里的邮件发送配置坑
内容的提问来源于stack exchange,提问作者Squidward
相关产品推荐
相关产品推荐

