Seal^_^ 2024-03-18 18:03 采纳率: 72.6%
浏览 20
已结题

Django+vue+elementui+mysql 前后端分离,登录报错Job.models.User.DoesNotExist

项目技术:Django+vue+elementui+mysql 前后端分离

问题描述:登录报错,如下:

Internal Server Error: /login/
Traceback (most recent call last):
  File "D:\IdeaProject\csdn\venv\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
    response = get_response(request)
  File "D:\IdeaProject\csdn\venv\lib\site-packages\django\core\handlers\base.py", line 181, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\Users\Administrator\Desktop\StudentJobAdmin\StudentJobAdmin-master\code\JobAdmin\Job\views.py", line 30, in login
    u = User.objects.get(uname=name, upasswd=passwd)
  File "D:\IdeaProject\csdn\venv\lib\site-packages\django\db\models\manager.py", line 85, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "D:\IdeaProject\csdn\venv\lib\site-packages\django\db\models\query.py", line 437, in get
    self.model._meta.object_name
Job.models.User.DoesNotExist: User matching query does not exist.
[18/Mar/2024 17:57:47] "POST /login/ HTTP/1.1" 500 79539

截图:

img

img

  • 写回答

8条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-03-18 18:07
    关注

    引自免费微信小程序:皆我百晓生

    这个错误信息表明在Django的后端中,尝试获取一个用户名为name、密码为passwdUser对象时,没有找到匹配的记录。这通常意味着在数据库中不存在这样的用户。以下是可能的解决方案:

    1. 检查用户名和密码: 确保前端发送的用户名和密码是正确的,并且在数据库中存在对应的记录。可以在Django的视图函数中添加一些日志输出,以便在登录失败时查看实际接收到的用户名和密码。

    2. 处理异常: 在Django的views.py文件中,你可以捕获DoesNotExist异常,然后返回一个友好的错误消息给前端。这样可以避免服务器返回500错误。修改views.py中的login函数如下:

      from django.core.exceptions import ObjectDoesNotExist
      
      def login(request):
          name = request.POST.get('uname')
          passwd = request.POST.get('upasswd')
      
          try:
              u = User.objects.get(uname=name, upasswd=passwd)
          except ObjectDoesNotExist:
              return JsonResponse({'error': '用户名或密码错误'}, status=400)
      
          # 如果没有异常,那么登录成功,进行后续逻辑...
      
    3. 密码哈希: 通常,密码不应该明文存储在数据库中,而是应该存储其哈希值。确保你的User模型中upasswd字段是存储的哈希值,并在验证时对前端提交的密码进行哈希处理后再比对。如果你使用的是Django的默认用户模型,它会自动处理这一点,但你的模型中似乎有一个自定义的upasswd字段,所以你需要确保正确处理密码。

    4. 前端验证: 在前端进行简单的用户名和密码验证,防止空值或不合法的输入提交到服务器。

    5. 调试: 使用开发工具(如Chrome的开发者工具)检查网络请求,查看POST到/api/login/的数据是否正确。确保unameupasswd字段包含在请求体中,并且值正确。

    6. 数据库连接: 确认Django能正确连接到MySQL数据库,没有权限或连接问题。

    7. 模型定义: 检查Job.models.User模型的定义,确保unameupasswd字段存在于模型中,并且在数据库中也有相应的列。

    按照这些步骤排查,你应该能找到问题所在。如果问题依然存在,请提供更多的代码上下文或错误日志,以便进一步分析。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月18日
  • 创建了问题 3月18日