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
相关产品推荐
相关产品推荐

