Django - request.POST.get('wert', 'standart_wert') ?

Django, Flask, Bottle, WSGI, CGI…
Antworten
Benutzeravatar
bugzz
User
Beiträge: 20
Registriert: Donnerstag 17. Juni 2010, 11:38

Hallo, Experten
Habe ein Problemm, bzw. Unklarhceiten mit der request.POST.get() Methode. Diese Methode nimmt zwei Parameter ein: 1 - gesuchter Wert und 2 - standart Wert. Und hier habe ich kann ich nicht 100% nachvollziehen. Wann wird der standaer-wert zurückgegeben? Falls gesuchten wert gar nicht gibt oder es ist leer oder wie? Ich benutze das in einem Formular (feedback) mit E-Mail feld.


mysite/contact/views.py

Code: Alles auswählen

from mysite.forms import ContactForm
...
def view_ContactForm (request):
    if request.method == 'POST':
        form = ContactForm(request.POST)
        if form.is_valid():
            form_data = form.cleaned_data
            reply_email = form_data.get('email', 'bitte_nicht_antworten@domain.org')

            new_email = EmailMessage(form_data['subject'],
                                 form_data['message'],
                                 reply_email,
                                 ['empfaenger@domain.com'],
                                 headers = {
                                    'Reply-To': reply_email
                                   }
                                 )
            new_message.send()
...
mysite/forms.py

Code: Alles auswählen

from django import forms
....

class ContactForm(forms.Form):
    subject = forms.CharField(max_length=100, label='Betreff', required=False)
    email = forms.EmailField(required=False, label='E-Mail')
    message = forms.CharField(widget=forms.Textarea, min_length=4, label='Nachricht')

    def clean_message(self):
        message = self.cleaned_data['message']
        num_words = len(message.split())
        if num_words < 4:
            raise forms.ValidationError('die Nachricht ist zu kurz')
        return message
Das Problemm ist deutlich zu sehen, falls ich beim Formular Ausfühlen extra vergessen habe die E-Mail einzugeben.
Das ganze (das Abschicken) läuf gut, aber als absender adresse (in E-mail header) steht leerer String statt bitte_nicht_antworten@domain.org
Deutsch ist nicht meine Muttersprache
BlackJack

@bugzz: Na im Grunde hast Du Dir die Frage doch selbst beantwortet: Wenn der Schlüssel vorhanden ist, aber der Wert eine leere Zeichenkette, dann wird die leere Zeichenkette geliefert und nicht der Defaultwert. Die `get()`-Methode funktioniert dort also genau so wie die gleichnamige Methode auf Dictionaries.
Benutzeravatar
bugzz
User
Beiträge: 20
Registriert: Donnerstag 17. Juni 2010, 11:38

Das heißt, der Defaultwert wird erst dann geliefert wenn der schlüssel namens 'email' nicht exestiert. Ansonsten wird dessen Wert (auch Leer-String) zurückgegeben. SO ?!
Deutsch ist nicht meine Muttersprache
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

bugzz hat geschrieben:Das heißt, der Defaultwert wird erst dann geliefert wenn der schlüssel namens 'email' nicht exestiert. Ansonsten wird dessen Wert (auch Leer-String) zurückgegeben. SO ?!
So verhält es sich bei mir und so steht es auch in der Dokumentation.
Antworten