Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用Django中的遗留数据库进行身份验证登录_Python_Django_Custom Backend - Fatal编程技术网

Python 使用Django中的遗留数据库进行身份验证登录

Python 使用Django中的遗留数据库进行身份验证登录,python,django,custom-backend,Python,Django,Custom Backend,我正在Django创建一个项目,我有一个帮助热线数据库,我想在项目中使用它。在数据库中,我有一个存储登录信息的表log\u user,但除了Django默认表之外,我找不到其他身份验证方法 视图.py from django.shortcuts import render from django.http import HttpResponse from .forms import Person from django.contrib.auth import authenticate, logi

我正在Django创建一个项目,我有一个
帮助热线
数据库,我想在项目中使用它。在数据库中,我有一个存储登录信息的表
log\u user
,但除了Django默认表之外,我找不到其他身份验证方法

视图.py

from django.shortcuts import render
from django.http import HttpResponse
from .forms import Person
from django.contrib.auth import authenticate, login

def user_login(request):
    if request.method == 'POST':
        form = Person(request.POST)
        if form.is_valid():
            username = request.POST['username']
            password = request.POST['password']
            user = authenticate(request, username=username, password=password)
            if user is not None:
                if user.is_active:
                    login(request, user)
                    return HttpResponse('Authenticated sucessfully')
                else:
                    return HttpResponse('Disable account')
            else:
                return HttpResponse('Invalid Login')
    else:
        form = Person()
        return render(request, 'login2.html', {'form': form})
from django import forms
from .models import Loginteste

class Person(forms.ModelForm):
    class Meta:
        model = Loginteste
        fields = ['username', 'password']
from django.db import models

class Loginteste(models.Model):
    username = models.CharField(max_length=50, blank=True, null=True)
    password = models.CharField(max_length=50, blank=True, null=True)

    class Meta:
        managed = True
        db_table = 'loginteste'
from .models import Loginteste

class MyBackend:
    def authenticate(self, request, username=None, password=None):
        user = Loginteste.object.get(username=username)
        if user.check_password(password):
            return (request, user)
from django.contrib.auth.models import User
from .models import Loginteste

class MyAuthBackend:
    def authenticate(self, request, username=None, password=None):
        if username is None or password is None:
            # nothing to do
            return None

        # get 'User' object
        try:
            usr = User.objects.get(username=username)
        except User.DoesNotExist:
            return None

        # get 'Loginteste' object
        try:
            loginteste = Loginteste.objects.get(username=username)
        except Loginteste.DoesNotExist:
            return None

        # authenticate user
        if not loginteste.check_password(password):
            # incorrect password
            return None

        return usr

    def get_user(self, pk):
        try:
            return User.objects.get(pk=pk)
        except User.DoesNotExist:
            pass

        return None
AUTHENTICATION_BACKENDS = [
    'project_config.auth_backends.MyAuthBackend',
    # 'django.contrib.auth.backends.ModelBackend',
]
forms.py

from django.shortcuts import render
from django.http import HttpResponse
from .forms import Person
from django.contrib.auth import authenticate, login

def user_login(request):
    if request.method == 'POST':
        form = Person(request.POST)
        if form.is_valid():
            username = request.POST['username']
            password = request.POST['password']
            user = authenticate(request, username=username, password=password)
            if user is not None:
                if user.is_active:
                    login(request, user)
                    return HttpResponse('Authenticated sucessfully')
                else:
                    return HttpResponse('Disable account')
            else:
                return HttpResponse('Invalid Login')
    else:
        form = Person()
        return render(request, 'login2.html', {'form': form})
from django import forms
from .models import Loginteste

class Person(forms.ModelForm):
    class Meta:
        model = Loginteste
        fields = ['username', 'password']
from django.db import models

class Loginteste(models.Model):
    username = models.CharField(max_length=50, blank=True, null=True)
    password = models.CharField(max_length=50, blank=True, null=True)

    class Meta:
        managed = True
        db_table = 'loginteste'
from .models import Loginteste

class MyBackend:
    def authenticate(self, request, username=None, password=None):
        user = Loginteste.object.get(username=username)
        if user.check_password(password):
            return (request, user)
from django.contrib.auth.models import User
from .models import Loginteste

class MyAuthBackend:
    def authenticate(self, request, username=None, password=None):
        if username is None or password is None:
            # nothing to do
            return None

        # get 'User' object
        try:
            usr = User.objects.get(username=username)
        except User.DoesNotExist:
            return None

        # get 'Loginteste' object
        try:
            loginteste = Loginteste.objects.get(username=username)
        except Loginteste.DoesNotExist:
            return None

        # authenticate user
        if not loginteste.check_password(password):
            # incorrect password
            return None

        return usr

    def get_user(self, pk):
        try:
            return User.objects.get(pk=pk)
        except User.DoesNotExist:
            pass

        return None
AUTHENTICATION_BACKENDS = [
    'project_config.auth_backends.MyAuthBackend',
    # 'django.contrib.auth.backends.ModelBackend',
]
型号.py

from django.shortcuts import render
from django.http import HttpResponse
from .forms import Person
from django.contrib.auth import authenticate, login

def user_login(request):
    if request.method == 'POST':
        form = Person(request.POST)
        if form.is_valid():
            username = request.POST['username']
            password = request.POST['password']
            user = authenticate(request, username=username, password=password)
            if user is not None:
                if user.is_active:
                    login(request, user)
                    return HttpResponse('Authenticated sucessfully')
                else:
                    return HttpResponse('Disable account')
            else:
                return HttpResponse('Invalid Login')
    else:
        form = Person()
        return render(request, 'login2.html', {'form': form})
from django import forms
from .models import Loginteste

class Person(forms.ModelForm):
    class Meta:
        model = Loginteste
        fields = ['username', 'password']
from django.db import models

class Loginteste(models.Model):
    username = models.CharField(max_length=50, blank=True, null=True)
    password = models.CharField(max_length=50, blank=True, null=True)

    class Meta:
        managed = True
        db_table = 'loginteste'
from .models import Loginteste

class MyBackend:
    def authenticate(self, request, username=None, password=None):
        user = Loginteste.object.get(username=username)
        if user.check_password(password):
            return (request, user)
from django.contrib.auth.models import User
from .models import Loginteste

class MyAuthBackend:
    def authenticate(self, request, username=None, password=None):
        if username is None or password is None:
            # nothing to do
            return None

        # get 'User' object
        try:
            usr = User.objects.get(username=username)
        except User.DoesNotExist:
            return None

        # get 'Loginteste' object
        try:
            loginteste = Loginteste.objects.get(username=username)
        except Loginteste.DoesNotExist:
            return None

        # authenticate user
        if not loginteste.check_password(password):
            # incorrect password
            return None

        return usr

    def get_user(self, pk):
        try:
            return User.objects.get(pk=pk)
        except User.DoesNotExist:
            pass

        return None
AUTHENTICATION_BACKENDS = [
    'project_config.auth_backends.MyAuthBackend',
    # 'django.contrib.auth.backends.ModelBackend',
]
auth_backend.py

from django.shortcuts import render
from django.http import HttpResponse
from .forms import Person
from django.contrib.auth import authenticate, login

def user_login(request):
    if request.method == 'POST':
        form = Person(request.POST)
        if form.is_valid():
            username = request.POST['username']
            password = request.POST['password']
            user = authenticate(request, username=username, password=password)
            if user is not None:
                if user.is_active:
                    login(request, user)
                    return HttpResponse('Authenticated sucessfully')
                else:
                    return HttpResponse('Disable account')
            else:
                return HttpResponse('Invalid Login')
    else:
        form = Person()
        return render(request, 'login2.html', {'form': form})
from django import forms
from .models import Loginteste

class Person(forms.ModelForm):
    class Meta:
        model = Loginteste
        fields = ['username', 'password']
from django.db import models

class Loginteste(models.Model):
    username = models.CharField(max_length=50, blank=True, null=True)
    password = models.CharField(max_length=50, blank=True, null=True)

    class Meta:
        managed = True
        db_table = 'loginteste'
from .models import Loginteste

class MyBackend:
    def authenticate(self, request, username=None, password=None):
        user = Loginteste.object.get(username=username)
        if user.check_password(password):
            return (request, user)
from django.contrib.auth.models import User
from .models import Loginteste

class MyAuthBackend:
    def authenticate(self, request, username=None, password=None):
        if username is None or password is None:
            # nothing to do
            return None

        # get 'User' object
        try:
            usr = User.objects.get(username=username)
        except User.DoesNotExist:
            return None

        # get 'Loginteste' object
        try:
            loginteste = Loginteste.objects.get(username=username)
        except Loginteste.DoesNotExist:
            return None

        # authenticate user
        if not loginteste.check_password(password):
            # incorrect password
            return None

        return usr

    def get_user(self, pk):
        try:
            return User.objects.get(pk=pk)
        except User.DoesNotExist:
            pass

        return None
AUTHENTICATION_BACKENDS = [
    'project_config.auth_backends.MyAuthBackend',
    # 'django.contrib.auth.backends.ModelBackend',
]

我尝试使用默认表“User”并使用登录功能,但无法使用已有的表(
log\u User
,位于数据库
HelpDesk
)。

我想我现在理解了您的问题

据我所知,Django确实依赖于
用户
模型;它可以是一个,但必须有某种类型的
用户
模型

构建时,它仍然必须返回
User
实例(或自定义
User
模型实例)

例如:

文件auth_backends.py

from django.shortcuts import render
from django.http import HttpResponse
from .forms import Person
from django.contrib.auth import authenticate, login

def user_login(request):
    if request.method == 'POST':
        form = Person(request.POST)
        if form.is_valid():
            username = request.POST['username']
            password = request.POST['password']
            user = authenticate(request, username=username, password=password)
            if user is not None:
                if user.is_active:
                    login(request, user)
                    return HttpResponse('Authenticated sucessfully')
                else:
                    return HttpResponse('Disable account')
            else:
                return HttpResponse('Invalid Login')
    else:
        form = Person()
        return render(request, 'login2.html', {'form': form})
from django import forms
from .models import Loginteste

class Person(forms.ModelForm):
    class Meta:
        model = Loginteste
        fields = ['username', 'password']
from django.db import models

class Loginteste(models.Model):
    username = models.CharField(max_length=50, blank=True, null=True)
    password = models.CharField(max_length=50, blank=True, null=True)

    class Meta:
        managed = True
        db_table = 'loginteste'
from .models import Loginteste

class MyBackend:
    def authenticate(self, request, username=None, password=None):
        user = Loginteste.object.get(username=username)
        if user.check_password(password):
            return (request, user)
from django.contrib.auth.models import User
from .models import Loginteste

class MyAuthBackend:
    def authenticate(self, request, username=None, password=None):
        if username is None or password is None:
            # nothing to do
            return None

        # get 'User' object
        try:
            usr = User.objects.get(username=username)
        except User.DoesNotExist:
            return None

        # get 'Loginteste' object
        try:
            loginteste = Loginteste.objects.get(username=username)
        except Loginteste.DoesNotExist:
            return None

        # authenticate user
        if not loginteste.check_password(password):
            # incorrect password
            return None

        return usr

    def get_user(self, pk):
        try:
            return User.objects.get(pk=pk)
        except User.DoesNotExist:
            pass

        return None
AUTHENTICATION_BACKENDS = [
    'project_config.auth_backends.MyAuthBackend',
    # 'django.contrib.auth.backends.ModelBackend',
]
文件settings.py

from django.shortcuts import render
from django.http import HttpResponse
from .forms import Person
from django.contrib.auth import authenticate, login

def user_login(request):
    if request.method == 'POST':
        form = Person(request.POST)
        if form.is_valid():
            username = request.POST['username']
            password = request.POST['password']
            user = authenticate(request, username=username, password=password)
            if user is not None:
                if user.is_active:
                    login(request, user)
                    return HttpResponse('Authenticated sucessfully')
                else:
                    return HttpResponse('Disable account')
            else:
                return HttpResponse('Invalid Login')
    else:
        form = Person()
        return render(request, 'login2.html', {'form': form})
from django import forms
from .models import Loginteste

class Person(forms.ModelForm):
    class Meta:
        model = Loginteste
        fields = ['username', 'password']
from django.db import models

class Loginteste(models.Model):
    username = models.CharField(max_length=50, blank=True, null=True)
    password = models.CharField(max_length=50, blank=True, null=True)

    class Meta:
        managed = True
        db_table = 'loginteste'
from .models import Loginteste

class MyBackend:
    def authenticate(self, request, username=None, password=None):
        user = Loginteste.object.get(username=username)
        if user.check_password(password):
            return (request, user)
from django.contrib.auth.models import User
from .models import Loginteste

class MyAuthBackend:
    def authenticate(self, request, username=None, password=None):
        if username is None or password is None:
            # nothing to do
            return None

        # get 'User' object
        try:
            usr = User.objects.get(username=username)
        except User.DoesNotExist:
            return None

        # get 'Loginteste' object
        try:
            loginteste = Loginteste.objects.get(username=username)
        except Loginteste.DoesNotExist:
            return None

        # authenticate user
        if not loginteste.check_password(password):
            # incorrect password
            return None

        return usr

    def get_user(self, pk):
        try:
            return User.objects.get(pk=pk)
        except User.DoesNotExist:
            pass

        return None
AUTHENTICATION_BACKENDS = [
    'project_config.auth_backends.MyAuthBackend',
    # 'django.contrib.auth.backends.ModelBackend',
]


唯一相对简单的选择是使用model
Loginteste
作为自定义用户模型。其他一切都涉及覆盖大量Djangos代码以使其正常工作。

您阅读过关于的文档吗?如果您没有将第二个数据库(帮助台)添加到项目中,您可以查看。是的,Ralf,我在自定义后端阅读了此文档,但我无法开发逻辑,因为我对该工具知之甚少,我看过一些教程和其他东西,但没有一个真正关注我的问题,每个人都使用“用户”。好的,那么,你能更具体地说明什么不起作用吗?你有错误吗?并添加导致问题的代码部分。这不是错误,可能是缺乏经验。我将用代码编辑我的问题。现在我明白了。每次你给一个选择,更新,删除,我会做一个不同的后端吗?我不明白你的评论。您将拥有此后端,每个
Loginteste
对象都必须有其相应的
User
实例。如果某个
Loginteste
实例还没有相应的
User
,您甚至可以修改auth后端来创建一个
User
实例。对不起,我不知道如何提问。要执行选择、更新和删除操作,我必须执行其他后端和custons用户模型,还是只是正常执行视图?拉尔夫,我将
“project.auth\u backend.MyAuthBackend”
放在
“AUTHENTICATION\u backends”
中,但即使我免除了该应用程序,也会出现以下错误:<代码>导入错误:没有名为“HelpDesk.auth\u backend”的模块。