Как получить данные из FormsDict, используя бутылку Python? - PullRequest
0 голосов
/ 15 декабря 2018

Я не могу напечатать результат.Это хорошо работает на колбу, если я использую, result= request.form, а затем print(result).Это печатает словарь на колбе.Но не работает, используя бутылку.Когда я использовал type(result), он говорит <class 'bottle.FormsDict'>

x.py file:

from bottle import request, template,route,run,post

@route('/')
def index():
    return template('val.html')

@post('/result')
def result():
    result=request.forms
    print(result)       #Unable to print 

if __name__ == '__main__':
    run(host='localhost',port=8080,debug='True',reloader='True')

val.html file:

<!DOCTYPE html>
<html>
<body>

<form action="http://localhost:8080/result" method = "POST">
Select a time:
<input type="time" name="usr_time">
<br> <br>
<input type="checkbox" name="A" value="A is on" >A </input>
<br>
<input type="checkbox" name="B" value="B is on" >B </input>
<br>
<input type="checkbox" name="C" value="C is on" >C </input>
<br><br>
<input type="submit"> </input>
</form>


</body>
</html>

result.html file:

<!doctype html>
<html>
   <body>

      <table border = 1>
         %for key, value in result.items():

            <tr>
               <th> {{ key }} </th>
               <td> {{ value }} </td>
            </tr>

         %endfor
      </table>

   </body>
</html>

1 Ответ

0 голосов
/ 15 декабря 2018

Класс бутылки FormsDict не имеет определенного метода __str__ или __repr__, поэтому при его печати вы просто получаете представление по умолчанию: <bottle.FormsDict object at 0x7fa0661aacf8>.

Однаковы можете получить доступ к его ключам и значениям, как обычный словарь Python:

>>> fd = FormsDict(a=1, b='2')
>>> fd
<bottle.FormsDict object at 0x7fa0661aae80>
>>> fd['a']
1
>>> fd.get('b')
'2'
>>> fd.keys()
dict_keys(['a', 'b'])
>>> list(fd.values())
[1, '2']
>>> list(fd.items())
[('a', 1), ('b', '2')]

Если вы хотите иметь возможность просматривать содержимое FormsDict, как обычный словарь, вы можете создать его подкласс и предоставить свой собственный__repr__ и __str__ методы.Этот класс предоставляет базовые реализации *

class PrettyFormsDict(FormsDict):

    def __repr__(self):
        # Return a string that could be eval-ed to create this instance.
        args = ', '.join('{}={!r}'.format(k, v) for (k, v) in sorted(self.items()))
        return '{}({})'.format(self.__class__.__name__, args)

    def __str__(self):
        # Return a string that is a pretty representation of this instance.
        args = ' ,\n'.join('\t{!r}: {!r}'.format(k, v) for (k, v) in sorted(self.items()))
        return '{{\n{}\n}}'.format(args)

>>> PrettyFormsDict = FD.PrettyFormsDict
>>> fd = PrettyFormsDict(a=1, b='2', c='foo')
>>> fd
PrettyFormsDict(a=1, b='2', c='foo')
>>> print(fd)
{
        'a': 1 ,
        'b': '2' ,
        'c': 'foo'
}

* FormsDict на самом деле MultiDict , то есть для ключа можноимеют несколько разных значений.Красивая печать таких значений оставлена ​​читателю в качестве упражнения.

...