在Django中添加身份验证

在Django中添加身份验证,django,authentication,Django,Authentication,我有一个django应用程序,我想添加我自己的身份验证,并检查用户是否过期(检查我的一些模型的过期日期)。如果用户已过期,我想在登录页面中发出一条带有相应消息的ValidationError。最好的方法是什么 谢谢,Alex如果你真的想做你自己的自定义身份验证,你应该阅读Django文档 不过,你可能不想自己动手。真糟糕。真正地除非有很好的理由,否则您应该避免自己的身份验证。主要原因是,如果不使用内置用户模型,许多django应用程序将停止工作。如果需要对现有源进行身份验证,这是创建自己后端的一

我有一个django应用程序,我想添加我自己的身份验证,并检查用户是否过期(检查我的一些模型的过期日期)。如果用户已过期,我想在登录页面中发出一条带有相应消息的ValidationError。最好的方法是什么


谢谢,Alex如果你真的想做你自己的自定义身份验证,你应该阅读Django文档

不过,你可能不想自己动手。真糟糕。真正地除非有很好的理由,否则您应该避免自己的身份验证。主要原因是,如果不使用内置用户模型,许多django应用程序将停止工作。如果需要对现有源进行身份验证,这是创建自己后端的一个有效原因。但也存在一些缺陷,您可能仍然希望为自定义后端使用内置用户模型

您应该告诉我们为什么要进行自定义身份验证,也许我们可以帮助您实现您的需求,而无需编写自定义后端

编辑

好吧,我想我现在明白你的意思了。(我想)你想要的是一个自定义的身份验证表单。我们目前使用自定义表单(尽管我们有不同的后端),因此您应该能够非常轻松地使用以下内容

from django.contrib.auth.forms import AuthenticationForm
from django import forms
from myproject.myapp.models import MyClass

class CustomAuthForm(AuthenticationForm):

    def clean(self):
        cleaned_data = super(CustomAuthForm, self).clean()
        user = self.user_cache # set by super class
        if user.my_class.expired:
            raise forms.ValidationError('This User has Expired!')
        return cleaned_data
然后,要使用此自定义身份验证表单,您需要在
urls.py
中有一个URL:

from myproject.myapp.forms import CustomAuthForm

url(r'^login/$', 'django.contrib.auth.views.login', name='login', 
    kwargs={'template_name':'youproject/login.html', 'authentication_form':CustomAuthForm}),

我现在明白了,您的问题最初表明您需要自定义验证,而不是身份验证。很抱歉没有正确阅读您的问题。

django.contrib.auth与您需要的有什么差距?我需要检查我的一个模型中的过期日期,如果用户在尝试登录时过期,请给出相应的错误。好的,通常在使用auth模块的应用程序视图中完成。另一种方法是创建一个可以覆盖objects.get()并执行检查的管理器。扩展auth模块的唯一主要好处是,您已经有了一个经过测试的、正在工作的cookie验证实现,它已经支持您所需要的内容。请看这里的补充阅读:非常感谢您的快速回复。我想禁用过期用户的访问权限。有一个管理员用户设置用户的过期日期,如果用户已过期,我希望在他尝试登录时向他显示适当的消息。@alex,那么你是使用自定义用户模型来完成此操作的吗?不是,我使用django的用户模型