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

Django自定义登录报错quote_from_bytes() expected bytes问题求助

Django自定义登录报错quote_from_bytes() expected bytes解决方法

错误根源

触发该错误的核心原因是**HttpResponseRedirect参数使用错误**:你将request作为第一个参数传入,但它的第一个参数必须是目标URL字符串,而非request对象。此外代码中还存在其他语法和逻辑问题,需一并修正。

修复步骤

1. 修正跳转函数调用

登录失败时,替换错误的HttpResponseRedirect(request, '#templates for login'),采用正确的跳转方式:

  • 若使用URL名称(推荐,需在urls.py中配置name参数):
    return redirect('login')  # 替换为你登录页的URL名称
    
  • 若直接使用路径:
    return HttpResponseRedirect('/login/')  # 替换为你登录页的实际路径
    

2. 修复其他语法与逻辑问题

视图代码中还有几处错误需要修正:

  • 表单字段名通常不含空格,检查前端表单的name属性,若为name="email"和name="password",则修改取值代码:
    user_mail = request.POST.get('email')
    password = request.POST.get('password')
    
  • Users.objects.get(email field = user_mail)存在语法错误,字段名不能带空格,假设字段为email,改为:
    user = Users.objects.get(email=user_mail)
    
  • 完善Session赋值:
    request.session['user_id'] = user.id  # 赋值为用户的ID字段
    
  • 修正成功跳转代码,redirect('templates/'where it redirects')语法错误,改为:
    return redirect('dashboard')  # 替换为目标页面的URL名称或路径
    

3. 完整修复后的视图代码

from django.shortcuts import redirect, HttpResponse
from django.contrib import messages
from .models import Users

def perform_login(request):
    if request.method != 'POST':
        return HttpResponse('Method not allowed')
    else:
        user_mail = request.POST.get('email')
        password = request.POST.get('password')
        if Users.objects.filter(email=user_mail, password=password).exists():
            user = Users.objects.get(email=user_mail)
            request.session['user_id'] = user.id
            return redirect('dashboard')  # 替换为你的目标页面URL名称或路径
        else:
            messages.error(request, "邮箱或密码不正确")
            return redirect('login')  # 替换为登录页的URL名称或路径

额外提示

  • 禁止明文存储密码:Django自带密码哈希功能,应使用make_password加密密码,验证时用check_password方法,避免直接存储和比较明文密码。
  • 优先使用Django自带认证系统(django.contrib.auth):比自定义实现更安全,且能减少重复开发工作。

内容的提问来源于stack exchange,提问作者Daman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 13:35:15