Django+PostgreSQL认证应用无法保存用户数据问题求助
问题排查与修复方案
1. 视图未区分请求方法,缺失错误捕获
你的signUpUser视图直接读取request.POST数据,既没判断请求是否为POST,也没处理字段缺失、长度超限等异常。POST请求若数据不符合模型约束,会静默保存失败;GET请求访问时还会触发KeyError。
修改视图,区分请求方法并添加基础校验:
from django.shortcuts import render, redirect from .models import UserProfile def signUpUser(request): if request.method == 'POST': # 用get方法避免键缺失直接报错 username = request.POST.get("username") email = request.POST.get("email") password = request.POST.get("password") # 校验必填字段非空 if not all([username, email, password]): return render(request, '注册模板.html', {'error': '请填写所有必填字段'}) # 匹配模型字段长度限制 if len(username) > 12: return render(request, '注册模板.html', {'error': '用户名长度不能超过12字符'}) if len(password) > 15: return render(request, '注册模板.html', {'error': '密码长度不能超过15字符'}) try: u = UserProfile(name=username, email=email, password=password) u.save() # 保存成功后重定向到登录页或主页 return redirect('登录页路由名称') except Exception as e: return render(request, '注册模板.html', {'error': f'保存失败:{str(e)}'}) # GET请求返回注册页面 return render(request, '注册模板.html')
2. 确认数据库迁移已执行
若UserProfile模型是新增或修改的,必须执行迁移命令让PostgreSQL生成对应的数据表:
python manage.py makemigrations python manage.py migrate
未执行迁移的话,数据库中不存在存储用户数据的表,自然无法保存数据。
3. 验证表单提交路由是否正确
确保表单所在页面的URL路由指向signUpUser视图。例如在urls.py中:
from django.urls import path from . import views urlpatterns = [ path('signup/', views.signUpUser, name='signup'), # 其他路由配置 ]
如果表单action属性为空,会提交到当前页面URL,需保证该URL对应的视图是signUpUser。
4. 修复密码明文存储的安全问题
当前代码直接明文存储密码,存在极高安全风险,建议用Django哈希工具处理:
from django.contrib.auth.hashers import make_password # 创建用户时替换密码赋值逻辑 u = UserProfile(name=username, email=email, password=make_password(password))
5. 开启详细日志排查深层问题
在settings.py中配置日志,查看数据库操作的详细信息:
LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'console': {'class': 'logging.StreamHandler'}, }, 'root': { 'handlers': ['console'], 'level': 'DEBUG', }, }
启动服务后,控制台会输出数据库执行的SQL语句及异常信息,帮助定位问题。
内容的提问来源于stack exchange,提问作者Manolo
相关产品推荐
相关产品推荐

