如何在django python控制台中打印结果

时间:2017-06-15 12:47:00

标签: python django django-forms django-views

我创建了一个具有登录选项的表单。我想显示python控制台中用户名标签中给出的用户名。 这是我的views.py文件:

from django.views.generic import TemplateView
from django.shortcuts import render
from app.forms import *
class login(TemplateView):
    template_name = 'app/login.html'
    def clean(self):
        form = RegistrationForm()
        print form.cleaned_data['username']

以下是我的forms.py文件:

from django import forms


class RegistrationForm(forms.Form):
    username = forms.CharField(label='Username', max_length=30)
    password = forms.CharField(label='Password',
                      widget=forms.PasswordInput())
    def clean_password(self):
        username = self.cleaned_data['username']

这不会打印出我想要的内容。请帮我解决这个问题。

2 个答案:

答案 0 :(得分:2)

如果要在基于类的视图中处理表单,则需要使用能够理解表单的基类。在您的情况下,FormView将是正确的。

除此之外,您还需要覆盖在渲染过程中实际调用的方法。您不能只定义一个随机方法并期望它被调用。在验证表单后调用的FormView方法称为form_valid。所以:

class login(FormView):
    template_name = 'app/login.html'
    form_class = RegistrationForm

    def form_valid(self, form):
        print form.cleaned_data['username']
        return super(FormView, self).form_valid(form)

答案 1 :(得分:1)

您正在创建新的Form对象而不提供POST数据:

form = RegistrationForm(data=self.request.POST)

正如丹尼尔在评论中所说,clean方法可能永远不会要求TemplateView。您可能希望使用FormView或仅使用View

您的clean_password功能很可能也不正确。它创建了局部变量username,它在函数之后被简单地丢弃:

def clean_password(self):
    username = self.cleaned_data['username']