仅在用户未经过身份验证时才进行Django表单验证?

时间:2015-06-10 15:58:01

标签: python django

我有一个表单,只有在用户尚未登录时才需要检查用户电子邮件。我知道我可以在我的视图中查看该电子邮件,但是对于此表单,我更愿意查看我的表单中的电子邮件。 / p>

使用下面的代码,即使导入int rowCount = xlsDs.Rows.Count; ,我也会在clean_email中收到错误:global name 'request' is not defined

request

2 个答案:

答案 0 :(得分:1)

请求对象不会转到表单。

但您可以轻松更改表单类的构造函数以接收用户对象:

def __init__(self, user, *args, **kwargs):
    self.user = user
    super(MyForm, self).__init__(*args, **kwargs)

然后您可以检查用户以后是否经过身份验证:

def clean_email(self):
    if not self.user.is_authenticated():

如果你真的需要整个请求对象,你只需要添加self,否则它会尝试访问一个名为request的全局变量。 即:

if not self.request.user.is_authenticated():

当然,分配对象变量,因此可以从类的任何方法访问它:

self.request = request

答案 1 :(得分:1)

clean_email方法中,您不能自动访问传递给__init__方法的参数。

您需要在request方法中将self.request存储在__init__中,然后您可以使用clean_email方法访问它。

class MyForm(forms.ModelForm): 
    def __init__(self, request, *args, **kwargs):
        self.request = request
        super(MyForm, self).__init__(*args, **kwargs)

    def clean_email(self):
        if not self.request.user.is_authenticated():