File E:\AAAshixunruanjian\Lib\site-packages\fastapi\routing.py:994, in APIRouter.api_route.<locals>.decorator(func)
993 def decorator(func: DecoratedCallable) -> DecoratedCallable:
--> 994 self.add_api_route(
995 path,
996 func,
997 response_model=response_model,
998 status_code=status_code,
999 tags=tags,
1000 dependencies=dependencies,
1001 summary=summary,
1002 description=description,
1003 response_description=response_description,
1004 responses=responses,
1005 deprecated=deprecated,
1006 methods=methods,
1007 operation_id=operation_id,
1008 response_model_include=response_model_include,
1009 response_model_exclude=response_model_exclude,
1010 response_model_by_alias=response_model_by_alias,
1011 response_model_exclude_unset=response_model_exclude_unset,
1012 response_model_exclude_defaults=response_model_exclude_defaults,
1013 response_model_exclude_none=response_model_exclude_none,
1014 include_in_schema=include_in_schema,
1015 response_class=response_class,
1016 name=name,
1017 callbacks=callbacks,
1018 openapi_extra=openapi_extra,
1019 generate_unique_id_function=generate_unique_id_function,
1020 )
1021 return func
File E:\AAAshixunruanjian\Lib\site-packages\fastapi\routing.py:933, in APIRouter.add_api_route(self, path, endpoint, response_model, status_code, tags, dependencies, summary, description, response_description, responses, deprecated, methods, operation_id, response_model_include, response_model_exclude, response_model_by_alias, response_model_exclude_unset, response_model_exclude_defaults, response_model_exclude_none, include_in_schema, response_class, name, route_class_override, callbacks, openapi_extra, generate_unique_id_function)
929 current_callbacks.extend(callbacks)
930 current_generate_unique_id = get_value_or_default(
931 generate_unique_id_function, self.generate_unique_id_function
932 )
--> 933 route = route_class(
934 self.prefix + path,
935 endpoint=endpoint,
936 response_model=response_model,
937 status_code=status_code,
938 tags=current_tags,
939 dependencies=current_dependencies,
940 summary=summary,
941 description=description,
942 response_description=response_description,
943 responses=combined_responses,
944 deprecated=deprecated or self.deprecated,
945 methods=methods,
946 operation_id=operation_id,
947 response_model_include=response_model_include,
948 response_model_exclude=response_model_exclude,
949 response_model_by_alias=response_model_by_alias,
950 response_model_exclude_unset=response_model_exclude_unset,
951 response_model_exclude_defaults=response_model_exclude_defaults,
952 response_model_exclude_none=response_model_exclude_none,
953 include_in_schema=include_in_schema and self.include_in_schema,
954 response_class=current_response_class,
955 name=name,
956 dependency_overrides_provider=self.dependency_overrides_provider,
957 callbacks=current_callbacks,
958 openapi_extra=openapi_extra,
959 generate_unique_id_function=current_generate_unique_id,
960 )
961 self.routes.append(route)
File E:\AAAshixunruanjian\Lib\site-packages\fastapi\routing.py:554, in APIRoute.__init__(self, path, endpoint, response_model, status_code, tags, dependencies, summary, description, response_description, responses, deprecated, name, methods, operation_id, response_model_include, response_model_exclude, response_model_by_alias, response_model_exclude_unset, response_model_exclude_defaults, response_model_exclude_none, include_in_schema, response_class, dependency_overrides_provider, callbacks, openapi_extra, generate_unique_id_function)
551 self.response_fields = {}
553 assert callable(endpoint), "An endpoint must be a callable"
--> 554 self.dependant = get_dependant(path=self.path_format, call=self.endpoint)
555 for depends in self.dependencies[::-1]:
556 self.dependant.dependencies.insert(
557 0,
558 get_parameterless_sub_dependant(depends=depends, path=self.path_format),
559 )
File E:\AAAshixunruanjian\Lib\site-packages\fastapi\dependencies\utils.py:285, in get_dependant(path, call, name, security_scopes, use_cache)
283 for param_name, param in signature_params.items():
284 is_path_param = param_name in path_param_names
--> 285 param_details = analyze_param(
286 param_name=param_name,
287 annotation=param.annotation,
288 value=param.default,
289 is_path_param=is_path_param,
290 )
291 if param_details.depends is not None:
292 sub_dependant = get_param_sub_dependant(
293 param_name=param_name,
294 depends=param_details.depends,
295 path=path,
296 security_scopes=security_scopes,
297 )
File E:\AAAshixunruanjian\Lib\site-packages\fastapi\dependencies\utils.py:482, in analyze_param(param_name, annotation, value, is_path_param)
476 use_annotation_from_field_info = get_annotation_from_field_info(
477 use_annotation,
478 field_info,
479 param_name,
480 )
481 if isinstance(field_info, params.Form):
--> 482 ensure_multipart_is_installed()
483 if not field_info.alias and getattr(field_info, "convert_underscores", None):
484 alias = param_name.replace("_", "-")
File E:\AAAshixunruanjian\Lib\site-packages\fastapi\dependencies\utils.py:115, in ensure_multipart_is_installed()
113 except ImportError:
114 logger.error(multipart_not_installed_error)
--> 115 raise RuntimeError(multipart_not_installed_error) from None
RuntimeError: Form data requires "python-multipart" to be installed.
You can install "python-multipart" with:
pip install python-multipart