如何在Django中为SQLServer数据库创建身份验证系统?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Django中为SQLServer数据库创建身份验证系统?相关的知识,希望对你有一定的参考价值。

我最近正在使用SQLServer数据库在django项目中工作。我已经将数据库与SQLServer连接,并且我想为该数据库中的表建立一个身份验证系统。

我知道django带有内置的身份验证系统,但是无法告诉django使用数据库中的特定表进行身份验证,它似乎只是在默认的管理页面中寻找用户。

django有什么方法可以在SQLServer数据库的特定表中查找数据并验证用户输入的信息?

答案

您可以通过实现自己的用户模型,然后告诉django如何验证用户身份来做到这一点。您的模型应如下所示:

class Users(models.Model):
    id = models.IntegerField(primary_key=True)
    is_active = models.IntegerField(default=1)
    date_joined = models.DateTimeField(default=timezone.now)
    last_login = models.DateTimeField(default=timezone.now)
    username = models.CharField(max_length=30, unique=True)
    password = models.CharField(max_length=30)

    @property
    def is_authenticated(self):
        return True

您可以添加其他字段,但是django必需。根据文档中的定义,属性is_authenticated必须始终返回true。

下一步是定义登录名的身份验证方式。在您的项目中的任何地方创建一个文件名backends.py,并在其中声明两个方法:authenticate和get_user,它应该类似于:

from django.contrib.auth.backends import ModelBackend
from users.models import Users
from django.contrib.auth.hashers import *
from login.util import *

class PersonalizedLoginBackend(ModelBackend):
    def authenticate(self, request=None, username=None, password=None, **kwars):
        #Here define you login criteria, like encrypting the password en then
        #Checking it matches. This is an example:
        try:
            user = Users.objects.get(username=username)
        except Users.DoesNotExist:
            return None
        if check_password(password, user.password):
            return user
        else:
            return None

    def get_user(self, user_id):
        #This shall return the user given the id
        from django.contrib.auth.models import AnonymousUser
        try:
            user = Users.objects.get(id=user_id)
        except Exception as e:
            user = AnonymousUser()
        return user

现在您需要告诉django您的settings.py上的后端在哪里:

AUTHENTICATION_BACKENDS = (
    # ... your other backends
    'path.to.backends.PersonalizedLoginBackend',
)

从那里应该可以像平常一样进行登录,首先进行身份验证,然后使用do_login函数。

在此处阅读更多详细信息:https://docs.djangoproject.com/en/2.2/topics/auth/customizing/

以上是关于如何在Django中为SQLServer数据库创建身份验证系统?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Django 中为每个用户附加不同的数据库?

如何在 django 模板中为循环创建唯一的 javascript 变量名?

如何让 South 在 Heroku 中为 Django 应用程序工作

如何在 Django ORM 中为 M2M 关系表创建 UniqueConstraint?

如何在 django rest 框架中为枚举字段创建序列化程序

如何在 Windows Forms/WPF 中为数据库视图(带连接)创建编辑器?