2013-07-19 33 views
11

Belgeleri inceledim, ancak bana göre, Flask'taki request.form nesnesinin nasıl yerleştirildiğini anlayamıyorum. The documentation, POST veya PUT isteklerinden ayrıştırılmış form verileriyle doldurulduğunu, ancak formumun dinamik olduğunu, bu nedenle POST isteği gönderildiğinde hangi alanların olduğunu bilmem gerektiğini söylüyor - ancak bu alanlardaki bilgileri eklediğimden emin olmak istiyorum veritabanına.flask.request.form dosyasındaki dinamik form alanları

Formdaki alanlardan bazıları her zaman vardır, ancak yaklaşık 60'lık bir listeden herhangi bir fazladan alan da olacaktır. Bu ek alanlardan hangilerinin istekte olduğunu nasıl anlayacağım? Verileri onlardan almalı mıyım?

DÜZENLEME: Benim özel sorunum çözüldü, ancak hala request.form sözlüğünün nasıl doldurulduğunu sormaya değer. Bir onay kutusu girdisi işaretlenmemişse, sözlüğüne isminin altında bir anahtar eklenmediğini ve sözlükte bulunmayan bir anahtarın değerini oldukça kafa karıştırıcı ve şifreli bir HTTP 400 BAD REQUEST sonuçlanmaya çalışmanın zor yolunu buldum. hata.

+0

İstekte görünen değerler, tarayıcının gönderdiği verilere bağlıdır. Bir onay kutusu işaretlenmediğinde bir tuş gönderilmemesi kararı, Flask tarafından değil, tarayıcı tarafından yapılır. –

+0

Sahip olduğunuz yeni sorular için yeni sorular açarsanız en iyisi olur. –

cevap

19

request.form, MultiDict nesnesini döndürür. Temel olarak, 1 anahtar için birden fazla değere sahip olabileceğiniz anlamına gelir. Eğer form POST neye benzediğini test etmek istiyorsanız MultiDict belgelerine okursanız

f = request.form 
for key in f.keys(): 
    for value in f.getlist(key): 
     print key,":",value 

aşağıdaki gibi sadece hızlı baskı deyimi yapmak, bu

olarak "Bir MultiDict özelleştirilmiş bir sözlük alt sınıfıdır sarma ayrıştırma işlevleri tarafından kullanılan örneğin aynı anahtar için birden fazla değer içeren anlaşma. bazı HTML form elemanları aynı anahtar için birden çok değer geçirmek için bu gereklidir. "

http://werkzeug.pocoo.org/docs/datastructures/#werkzeug.datastructures.MultiDict

+0

İlk bakışta, 'request.form' 'in normal bir Python sözlüğü gibi nasıl ayrıştırıldığını anlamak biraz zor. 'f' 'yazdırmayı denerseniz,' tuples ', ancak cevap, örnekle ve aynı zamanda Flask MultiDict'ın tanımıyla ilgili olarak çok anlam ifade eder. Çok teşekkürler, # kodgeek :). – ivanleoncz

İlgili konular