首页 > 解决方案 > Django:当登录详细信息与自定义模型详细信息不匹配时,不允许用户查看页面

问题描述

我有存储登录详细信息的自定义模型:

class UserRegistration(models.Model):
    # Auto updated when data is inserted
    created_at = models.DateTimeField(auto_now_add=True, auto_now=False)
    # Auto updated when data is altered
    updated_at = models.DateTimeField(auto_now_add=False, auto_now=True)

    username = models.CharField(max_length=255, null=True)
    password = models.CharField(max_length=255, null=True)
    first_name = models.CharField(max_length=255, null=True)
    last_name = models.CharField(max_length=255, null=True)

    def __str__(self):
        return self.first_name

urls.py 是

url(r'^login/$', view.login_page, name='login_page'),

views.py 是

def login_page(request):
    if request.method == 'GET':
        return render(request, "login_page.html")

    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        print username, password
        credentials_matches = False  # considering credentials are wrong

        all_users = UserRegistration.objects.all()
        for user in all_users:
            if user.username == username and user.password == password:
                credentials_matches = True
                break

        if credentials_matches:
            return HttpResponse('success')
            # return redirect("http://127.0.0.1:8000/lmtech")
        else:
            return HttpResponse('fail')

如果用户没有登录,我有其他视图我不希望显示给用户。我虽然关于 @login_required() 但在这种情况下,用户详细信息在自定义模型中。我该如何解决这个问题?

标签: pythondjangourlloginviews

解决方案


不能像这样制作自定义用户模型。编写自己的身份验证系统总是不安全的。

您应该使用标准的内置身份验证框架 - 您可以替换您自己的用户模型,但它必须从 AbstractBaseUser 继承,请参阅文档。但是,似乎没有太多理由这样做,因为您没有添加任何自定义功能。


推荐阅读