def parse_file_upload(self, META, post_data): """Return a tuple of (POST QueryDict, FILES MultiValueDict).""" self.upload_handlers = ImmutableList( self.upload_handlers, warning= "You cannot alter upload handlers after the upload has been processed." ) parser = MultiPartParser(META, post_data, self.upload_handlers, self.encoding) return parser.parse()
def __call__(self, decorated): if os.environ.get("DJANGO_REMOVE_FIELD_DISABLED") is not None: return decorated decorated__init__ = decorated.__init__ decorated__setattr__ = decorated.__setattr__ def __setattr__(inner_self, name, value): if name in self.fieldnames: raise AttributeError( f"Field '{decorated.__name__}.{name}' is deprecated and should" " not be called anymore") return decorated__setattr__(inner_self, name, value) def __init__(innerself, *args, **kwargs): for fieldname, value in kwargs.items(): if fieldname in self.fieldnames: raise AttributeError( f"Field '{decorated.__name__}.{fieldname}' is deprecated" " and should not be set anymore") decorated__init__(innerself, *args, **kwargs) decorated.__init__ = __init__ for field in decorated._meta.fields: if field.name in self.fieldnames and (not field.null or not field.blank): raise ValueError( f"Field '{decorated.__name__}.{field.name}' must set 'null' and" " 'blank' to True") decorated._meta.concrete_fields = [ field for field in decorated._meta.concrete_fields if field.name not in self.fieldnames ] decorated._meta.local_fields = [ field for field in decorated._meta.local_fields if field.name not in self.fieldnames ] decorated._meta.fields = ImmutableList([ field for field in decorated._meta.fields if field.name not in self.fieldnames ]) decorated.__setattr__ = __setattr__ return decorated
def parse_file_upload(self, META, post_data): """Return a tuple of (POST QueryDict, FILES MultiValueDict).""" # self 是「请求对象」 self.upload_handlers = ImmutableList( self.upload_handlers, warning= "You cannot alter upload handlers after the upload has been processed." ) print('【django.http.request.HttpRequest.parse_file_upload】' '「请求对象」创建「请求表单解析对象」并调用其 parse 方法') # 此类定义在 django.http.multipartparser 模块中,其实例被称为「请求表单解析对象」 # META 是包含请求头信息的字典对象 # post_data 是 self ,也就是「请求对象」 # self.upload_handlers 是元组,里面是一些文件上传相关的对象 # self.encoding 是字符串或 None TODO parser = MultiPartParser(META, post_data, self.upload_handlers, self.encoding) # 调用「请求表单解析对象」的 parse 方法 # 处理请求体中的表单数据和文件数据,生成两个类字典对象并返回 return parser.parse()
def make_immutable_fields_list(name, data): return ImmutableList(data, warning=IMMUTABLE_WARNING % name)
def set_primary_key(model, field_name): pk = model._meta.get_field(field_name) model._meta.pk = pk model._meta.auto_field = pk model._meta.fields = ImmutableList( [f for f in model._meta.fields if not isinstance(f, AutoField)])