2017-06-15 14 views
0

ログインオプションを持つフォームを作成しました。私は、Pythonコンソールのユーザ名ラベルに与えられたユーザ名を表示したい。これは私が望んで印刷されませんdjangoのpythonコンソールで結果を表示するには

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'] 

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ファイルです: はここに私のviews.pyファイルです。 Plsは私がこれを解決するのに役立ちます。

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

をダニエルが彼のコメントで述べているようclean方法は、おそらくTemplateViewのために呼び出されることはありません:

+0

は、クラス 'のためのあなたの全体のコードを提供してくださいすることができ –

+0

をlogin'?何がうまくいかないの?それは何をするためのものか? – Sayse

+0

ビューで 'clean'メソッドを定義しているのはなぜですか?それが何をすると思いますか? –

答えて

2

あなたは、クラスベースのビューでフォームを処理したい場合は、あなたがフォームを理解し、基本クラスを使用する必要があります。あなたの場合は、FormViewが正しいでしょう。

同様に、レンダリングプロセス中に実際に呼び出されるメソッドをオーバーライドする必要があります。ランダムメソッドを定義し、それを呼び出すことは期待できません。フォームが検証された後に呼び出されるFormViewのメソッドはform_validと呼ばれます。だから、私は理由を尋ねる..Can

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) 
+0

ありがとうございました。しかし、それはまだ私がログインフォームで与えたユーザー名を表示しませんでした –

1

あなたはPOSTデータを供給することなく、新しいFormオブジェクトを作成しています。代わりにFormViewまたは単にViewを使用します。

あなたのclean_password機能はおそらく正しくない可能性があります。これは単に関数の後に廃棄されたローカル変数usernameを作成します。

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

コードを変更しましたが、それでも私が望む出力が得られません。 –

関連する問題