2017-06-15 4 views
0

Ich erstellte ein Formular mit Login-Option. Ich möchte den Benutzernamen anzeigen, der in der Benutzernamen-Bezeichnung in der Python-Konsole angegeben wurde. Hier ist meine views.py Datei:So drucken Sie ein Ergebnis in der Django Python-Konsole

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

Die folgende meine forms.py Datei ist:

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

Dieser druckt nicht, was ich wollte. Bitte helfen Sie mir, dies zu lösen.

+0

können Sie bitte Ihre gesamte Code für die Klasse bieten 'login' –

+0

..Can ich fragen, warum? was funktioniert nicht? was tut es? – Sayse

+0

Warum definieren Sie eine "saubere" Methode in der Ansicht? Was lässt dich denken, dass das irgendetwas bewirken würde? –

Antwort

2

Wenn Sie ein Formular in Ihrer Klasse basierte Ansicht bearbeiten möchten, müssen Sie eine Basisklasse verwenden, die Formen versteht. In Ihrem Fall wäre ein FormView der richtige.

Außerdem müssen Sie eine Methode überschreiben, die während des Renderprozesses tatsächlich aufgerufen wird. Sie können nicht einfach eine zufällige Methode definieren und erwarten, dass sie aufgerufen wird. Die Methode von FormView, die nach dem Validieren des Formulars aufgerufen wird, heißt form_valid. Also:

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

Danke Mann. Aber es hat immer noch nicht den Benutzernamen gedruckt, den ich im Login-Formular angegeben habe –

1

Sie erstellen ein neues Formular Objekt, ohne die POST-Daten zu liefern:

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

Und als Daniel in seinem Kommentar sagt die clean Methode wird wahrscheinlich nie für ein TemplateView genannt. Vielleicht möchten Sie stattdessen FormView oder einfach View verwenden.

Ihre clean_password Funktion ist höchstwahrscheinlich auch nicht korrekt. Es schafft die lokale Variable username, die einfach nach der Funktion verworfen:

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

Ich habe den Code geändert und es gibt immer noch nicht die gewünschte Ausgabe. –