如何在Python中访问类变量?

时间:2017-02-17 17:12:53

标签: python django

我是Python编程的新手,想知道如何访问我在一个文件中声明的变量到另一个文件?我正在研究Django并有两个文件:

  1. forms.py

    class ContactForm(forms.Form):
    
        full_name = forms.CharField(max_length=100)
        email = forms.EmailField()
        message = forms.CharField(max_length=1000)
    
  2. views.py

    from .forms import ContactForm
    
    def contact(request):
    
        e = ContactForm()
        toPrint = e.get(email)
        print(toPrint)
    
  3. 我只是测试它在终端上打印,以帮助我学习如何访问这些变量以在views.py中使用它们

4 个答案:

答案 0 :(得分:0)

在您通常会传入表单中的数据的视图中,然后您可以使用cleaning_data来抓取它

def contact(request):
    context = {}
    if request.method == 'POST':
        form = ContactForm(data=request.POST)
        if form.is_valid():
            email = form.cleaned_data.get('email', '')
            # do something with email here??
    else:
        form = ContactForm()
    context['form'] = form
    return render(request, 'signup.html', context)

答案 1 :(得分:0)

编辑:正如评论中指出的那样,这个答案在django的特定情况下不起作用,因为有些django-magic。但总的来说这应该是正确的。

首先,您应该在__init__类的ContactForm函数(构造函数)中声明变量。然后将其存储在self

class ContactForm(forms.Form):
    def __init__(self):
        super().__init__()
        self.full_name = forms.CharField(max_length=100)
        self.email = forms.EmailField()
        self.message = forms.CharField(max_length=1000)

在任何一种情况下(如果保存代码就像你拥有它,或者你明确地使用了构造函数),你可以简单地访问变量

e = ContactForm()
to_print = e.email
....

答案 2 :(得分:0)

e = ContactForm()

如果您的表单已经过验证,则可以通过

进行访问
e.cleaned_data.get('email')

答案 3 :(得分:0)

Django表单使用所谓的元类。在这种特定情况下,它的作用是捕获表单上定义的所有Field实例,并将它们放在名为declared_fields的字典中。您可以看到源代码here。您将以ContactForm.declared_fields['email']的身份访问原始字段。

表单会复制declared_fields并将其放在fields属性中,以允许更改单个表单实例中的字段。然后,您将按如下方式访问字段:

e = ContactForm()
e.fields['email']

正如其他人所说,如果不是元类,你只需使用ContactForm.emaile.email