Django导入错误:无法从django.contrib.auth.decorators导入staff_member_required
Django导入错误:无法从django.contrib.auth.decorators导入staff_member_required
嘿,我之前也碰到过这个坑!这其实是Django版本对应的导入路径搞混了,别慌,咱们一步步解决:
首先得明确:staff_member_required这个装饰器并不在django.contrib.auth.decorators模块里——在大部分Django版本(尤其是4.0之前的版本)中,它属于django.contrib.admin.decorators模块。
解决方案1:修正导入路径
把你原来的导入语句拆分调整,改成这样:
from django.contrib.auth.decorators import login_required, user_passes_test from django.contrib.admin.decorators import staff_member_required
改完之后重启服务器,应该就能正常导入使用了。
解决方案2:自定义等价装饰器(兼容性更强)
如果你不想依赖admin模块的装饰器,也可以用auth模块自带的user_passes_test自己实现一个功能完全一致的版本:
from django.contrib.auth.decorators import login_required, user_passes_test # 自定义staff_member_required装饰器,效果和官方一致 def staff_member_required(view_func): return user_passes_test(lambda user: user.is_staff)(view_func)
这个自定义版本不挑Django版本,兼容性拉满。
额外小检查:确认你的Django版本
你可以在终端跑这个命令看看当前环境的Django版本:
python -m django --version
如果你的版本是Django 4.0及以上,那staff_member_required确实应该在auth.decorators里,这种情况下可能需要再确认下环境依赖是否真的装对了(不过你说已经重装过环境,大概率还是版本低于4.0的情况)。
备注:内容来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

