首页 > 解决方案 > 用户未进行身份验证

问题描述

我正在尝试创建一个简单的登录页面。但是用户总是返回为无。

这是我的 login.html

<form method = 'POST'>
        {% csrf_token %}
    <div class="body"></div>
        <div class="name">
            <div>Chili<span>Pili</span></div>
        </div>
        <br>
        <div class="login">
                <input type="text" placeholder="Username" name="username"><br>
                <input type="password" placeholder="Password" name="password"><br>
                <input type="submit" value="Login">
        </div>
    </form>

我在 view.py 中的登录功能

def login(request):
    if request.method == "POST":
        username = request.POST['username']
        password = request.POST['password']

        user = authenticate(username = username, password = password)

        if user is not None:
            login(user)
            print (user)
            messages.success(request, "You have successfully Logged In.")
            return redirect('index')
        else:
            messages.error(request, "You have entered invalid credentials. Please try again")
            return redirect('login')
    else:
        return render(request, 'main/login.html')
    

模型.py:

class users(models.Model):
    _id = models.AutoField
    name = models.CharField(max_length = 100)
    username = models.CharField(max_length = 100)
    email = models.EmailField(max_length=254)
    hpassword = models.CharField(max_length = 255)
    category = models.CharField(max_length=50, default= "teacher")

    def __str__(self):
        return self.name 
        return self.username
        return self.email
        return self.category

    USERNAME_FIELD = 'username'
    REQUIRED_FIELDS = [username, hpassword]

不断返回为 none 并且只有 else 语句被执行。我无法理解这里出了什么问题

标签: pythondjangoauthenticationdjango-forms

解决方案


尝试

def loginview(request):
    username = request.POST['username']
    password = request.POST['password']
    user = authenticate(request, username=username, password=password)
    if user is not None:
        login(request, user)
        
        ...
    else:
       
        ...

您收到该错误的原因是 login(request,user) 正在重新回到登录视图方法,而不是使用身份验证登录方法....将登录视图方法名称更改为“loginview”就可以了。


推荐阅读