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

Django手动创建普通用户无法登录仅管理员可登录且报CSRF错误

问题根因

你当前遇到的CSRF报错核心是登录成功后直接返回模板而非重定向,导致新session对应的CSRF令牌没有同步更新到客户端,普通用户登录后如果页面内有POST操作就会触发令牌校验失败。另外你提供的home视图代码存在缩进错误,也可能导致逻辑异常。

修复步骤

1. 修正home视图逻辑

将登录成功后的render改为redirect,同时修正代码缩进,修改后代码如下:

from django.shortcuts import redirect, render
from loginapp.models import Register
from django.contrib import messages
from django.contrib.auth import authenticate, login, logout

def home(request):
    if request.method == 'POST':
        username = request.POST['username']
        password = request.POST['password']
        user = authenticate(request, username=username, password=password)
        if user is not None:
            login(request, user)
            # 这里改成重定向,不要直接render模板
            return redirect('home')
        else:
            messages.error(request, "Bad Creds!!")
            return redirect('/')    

    return render(request, "home.html")

2. 校验普通用户状态

进入Django管理后台,检查你手动创建的普通用户的激活选项是否已勾选,未激活的用户会触发登录失败逻辑,跳转过程也可能出现CSRF校验异常。

3. 检查home.html模板

如果home.html页面内存在POST提交的表单,确保每个表单内都添加了{% csrf_token %}标签,不要遗漏。

4. 确认CSRF中间件配置

检查settings.py中的MIDDLEWARE列表,确认已配置django.middleware.csrf.CsrfViewMiddleware,且位置在django.contrib.sessions.middleware.SessionMiddleware之后,默认Django项目都会默认配置该中间件,如被删除需手动补回。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 12:54:03