예제 #1
0
    def DELETE(self):
        if self.method != 'DELETE':
            return NoVars('Not a DELETE request')

        content_type = self.content_type
        if content_type in (
                'application/x-www-form-urlencoded',
                'multipart/form-data'):

            self._check_charset()
            if self.is_body_seekable:
                self.body_file_raw.seek(0)
            fs_environ = self.environ.copy()

            # FieldStorage assumes a missing CONTENT_LENGTH, but a
            # default of 0 is better:
            fs_environ.setdefault('CONTENT_LENGTH', '0')
            fs_environ['QUERY_STRING'] = ''

            fs = FieldStorage(
                fp=self.body_file,
                environ=fs_environ,
                keep_blank_values=True)
            delete_values = MultiDict.from_fieldstorage(fs)

            ctype = self._content_type_raw or 'application/x-www-form-urlencoded'
            f = FakeCGIBody(delete_values, ctype)
            self.body_file = BufferedReader(f)
            return delete_values

        else:
            data = parse_qsl_text(self.environ.get('QUERY_STRING', ''))
            return MultiDict(data)