You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 10:27:13