The values of :attr:`forms` and :attr:`files` combined into a single :class:`FormsDict`. Values are either strings (form values) or instances of :class:`MPBytesIOProxy` (file uploads).
(self)
| 1777 | |
| 1778 | @DictProperty('environ', 'bottle.request.post', read_only=True) |
| 1779 | def POST(self): |
| 1780 | """ The values of :attr:`forms` and :attr:`files` combined into a single |
| 1781 | :class:`FormsDict`. Values are either strings (form values) or |
| 1782 | instances of :class:`MPBytesIOProxy` (file uploads). |
| 1783 | """ |
| 1784 | post = FormsDict() |
| 1785 | # We default to application/x-www-form-urlencoded for everything that |
| 1786 | # is not multipart and take the fast path (also: 3.1 workaround) |
| 1787 | if not self.content_type.startswith('multipart/'): |
| 1788 | body = tonat(self._get_body_string(self.MEMFILE_MAX), 'latin1') |
| 1789 | for key, value in _parse_qsl(body): |
| 1790 | post[key] = value |
| 1791 | return post |
| 1792 | |
| 1793 | if py3k: |
| 1794 | post.recode_unicode = False |
| 1795 | body = self.body |
| 1796 | markup = body.multipart_markup |
| 1797 | if markup is None: |
| 1798 | raise HTTPError(400, '`boundary` required for mutlipart content') |
| 1799 | elif markup.error is not None: |
| 1800 | raise markup.error |
| 1801 | for item in MPFieldStorage.iter_items(body, markup.markups, self.MEMFILE_MAX): |
| 1802 | if item.filename is None: |
| 1803 | post[item.name] = item.value |
| 1804 | else: |
| 1805 | post[item.name] = FileUpload(item.file, item.name, |
| 1806 | item.filename, item.headers) |
| 1807 | return post |
| 1808 | |
| 1809 | @property |
| 1810 | def url(self): |
nothing calls this directly
no test coverage detected