如何在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 模板中为循环创建唯一的 javascript 变量名?
如何让 South 在 Heroku 中为 Django 应用程序工作
如何在 Django ORM 中为 M2M 关系表创建 UniqueConstraint?