我创建了一个具有登录选项的表单。我想显示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']
这不会打印出我想要的内容。请帮我解决这个问题。
答案 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']