Django用户登录时密码明文显示、提交跳转404问题求助
问题1:密码输入明文显示
原因
自定义的UserLogin表单继承自ModelForm,Django User模型的password字段默认渲染为普通文本输入框,不会自动启用密码遮挡。
解决方法
修改Forms.py中的UserLogin类,给password字段指定密码输入控件:
from django.forms import PasswordInput class UserLogin(ModelForm): class Meta: model = User fields= ('username', 'password') widgets = { 'password': PasswordInput(), }
更推荐直接使用Django内置的AuthenticationForm,无需自行定义登录表单,已经默认处理了密码控件、字段校验等逻辑。
问题2:提交后跳转404错误
原因
HttpResponseRedirect中传入的是相对路径,会自动拼接在当前页面的URL路径后。你当前登录页路径为/login_user/,拼接后就变成了错误的/login_user/simple_investing/create_company.htm/。
解决方法
方法1:使用绝对路径跳转,路径开头添加斜杠:
return HttpResponseRedirect('/simple_investing/create_company.htm/')
方法2(更规范):给路由配置name属性,通过reverse函数动态生成路径,避免硬编码:
from django.urls import reverse return HttpResponseRedirect(reverse('create_company')) # 对应urls.py中path的name参数
额外优化点
当前login_page视图中messages.success的调用位置错误,无论用户是否刚完成注册、是否登录成功,只要访问登录页就会弹出“账号创建成功”的提示,建议把这段逻辑移动到注册成功的跳转逻辑中,不要放在登录页视图的全局位置。
内容的提问来源于stack exchange,提问作者Mati
相关产品推荐
相关产品推荐

