Żądanie Django pobierz parametry

84

W żądaniu Django mam:

POST:<QueryDict: {u'section': [u'39'], u'MAINS': [u'137']}>

Jak uzyskać wartości sectioni MAINS?

if request.method == 'GET':
    qd = request.GET
elif request.method == 'POST':
    qd = request.POST

section_id = qd.__getitem__('section') or getlist....
Ponton
źródło
7
Nigdy nie wywołuj bezpośrednio żadnej z magicznych metod. Zawsze używaj odpowiedniej funkcji pomocniczej.
Ignacio Vazquez-Abrams
k czy jest jakiś sposób na dekodowanie sekcji
Hulk,
1
Przeczytaj dokumentację django dotyczącą tych obiektów: docs.djangoproject.com/en/dev/ref/request-response/… . Istnieją pewne różnice w porównaniu z dyktowaniem w Pythonie.
Ski

Odpowiedzi:

91

Możesz użyć []do wyodrębnienia wartości z QueryDictobiektu, tak jak w przypadku każdego zwykłego słownika.

# HTTP POST variables
request.POST['section'] # => [39]
request.POST['MAINS'] # => [137]

# HTTP GET variables
request.GET['section'] # => [39]
request.GET['MAINS'] # => [137]

# HTTP POST and HTTP GET variables (Deprecated since Django 1.7)
request.REQUEST['section'] # => [39]
request.REQUEST['MAINS'] # => [137]
Johannes Gorset
źródło
10
tylko wskazówka po tych wszystkich latach: request.REQUEST jest tymczasem przestarzała
aronadaal
190

Możesz również użyć:

request.POST.get('section','') # => [39]
request.POST.get('MAINS','') # => [137] 
request.GET.get('section','') # => [39]
request.GET.get('MAINS','') # => [137]

Użycie tego gwarantuje, że nie otrzymasz błędu. Jeśli dane POST / GET z dowolnym kluczem nie są zdefiniowane, zamiast zgłaszania wyjątku zostanie użyta wartość rezerwowa (zostanie użyty drugi argument funkcji .get ()).

crodjer
źródło
1
Zdecydowanie najbardziej solidny sposób!
d-coder