当我try 使用无效用户登录时,我收到此错误,我希望被重定向到登录页面.

它突出显示了muy views.py上的user.save()

views.py

def user_login(request):
    if request.method == 'POST':
        form = LoginForm(request.POST)
        if form.is_valid():
            user = authenticate(request, **form.cleaned_data)
            user.save()
            if user:
                login(request, user)
                return redirect('home')
            else:
                return redirect(reverse('login'))
    else:
        form = LoginForm()
    return render(request, 'accountApp/login.html', {'form': form})

forms.py

from django import forms
from django.contrib.auth.forms import UserCreationForm


class LoginForm(forms.Form):
    username = forms.CharField(max_length=100)
    password = forms.CharField(widget=forms.PasswordInput)

login.html

{% block content %}

  <form method="post">
    {% csrf_token %}
      <h1>Login</h1>
    <fieldset class="form-group" style="width: 250px;">
      {{ form|crispy }}
    </fieldset>
    <button type="submit">Log In</button>
  </form>
{% endblock %}

推荐答案

如果凭据错误,则AUTHENTICATE函数返回NONE,因此判断用户是否有效.将IF条件更改为if user is not None: 即,views.py如下所示.

def user_login(request):
    if request.method == 'POST':
        form = LoginForm(request.POST)
        if form.is_valid():
            user = authenticate(request, **form.cleaned_data)
            # user variable will be None if it is an invalid user
            if user is not None:
                login(request, user)
                return redirect('home')
            else:
                return redirect(reverse('login'))
    else:
        form = LoginForm()
    return render(request, 'accountApp/login.html', {'form': form})

参考文档:https://docs.djangoproject.com/en/4.1/topics/auth/default/#django.contrib.auth.login

Django相关问答推荐

如何在REST框架中以SON格式返回错误,而不是HTML格式返回错误?

如何在uwsgi中创建单个日志(log)文件?

为特定表行更新或创建

当从 fastapi 发送请求时,Django 无法对 Postgres 执行查询

根据当前对象中的多对多字段过滤对象

如何删除django请求中的重复项

使用 Crispy Forms 时 Django 返回 'TemplateDoesNotExist'

int_list_validator在 Django 表单中不起作用

如何重命名标准 django-registration 模板的名称

Django Rest Framework 中的 to_representation() 可以访问普通字段吗

Django中基于令牌的身份验证

relation "django_site" does not exist

Django:将原始html(来自数据库)显示为html,而不是呈现

如何在终端中切换 Python 版本?

Django:在管理界面中显示图像

Django 不调用模型清理方法

如何在不发送信号的情况下保存模型?

AssertionError: `HyperlinkedIdentityField` 需要序列化程序上下文中的请求

在 Django 开发服务器中关闭静态文件的缓存

BASE DIR 的绝对路径是什么?