Datos de formularios y carga de archivos
Gestione datos de formularios HTML tradicionales e implemente cargas de archivos mediante las capacidades integradas de FastAPI.
Datos de formularios y carga de archivos es una lección gratuita de FastAPI Backend Development Bootcamp en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de FastAPI Backend Development Bootcamp, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de FastAPI Backend Development Bootcamp incluye 4 lecciones en total.
Partes de esta lección aún no han sido traducidas y se muestran en inglés.
Form Data Basics
When you fill out a web form (like a login or registration page) and click "submit," the data you entered is often sent as form data.
This is a traditional way for browsers to send information to a server, different from sending JSON in a request body.
Form data can be sent in two main ways:
application/x-www-form-urlencoded: For simple key-value pairs.multipart/form-data: Used when files are involved, or for larger, more complex data.
FastAPI's Form Dependency
FastAPI makes handling form data easy using the Form dependency from fastapi.
It works similarly to Query or Path parameters, but it tells FastAPI to expect the data in the request body as form fields.
You import it like this: from fastapi import FastAPI, Form.
Basic Form Endpoint Example
Let's create an endpoint that accepts a username and password as form data. Notice how username and password are explicitly marked with Form(...).
This tells FastAPI to parse them from the form body, not as JSON or query parameters.
from fastapi import FastAPI, Form
import uvicorn
app = FastAPI()
@app.post("/login/")
async def login(username: str = Form(...), password: str = Form(...)):
return {"username": username, "message": "Login successful!"}
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8000)Interacting with Form Data
You can test this endpoint using tools like curl or by creating a simple HTML form. The -d flag in curl sends form data.
Make sure your FastAPI application from the previous scene is running!
curl -X POST "http://127.0.0.1:8000/login/" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "username=coddy&password=secret"File Uploads Explained
Uploading files (like images, documents, or videos) is a common web task. This type of data is sent using multipart/form-data encoding.
FastAPI provides special tools to handle these uploads efficiently, allowing you to access file contents and metadata.
FastAPI's UploadFile
For file uploads, FastAPI uses the UploadFile class (from fastapi) along with the File dependency.
When you declare a parameter with File(...) and type-hint it as UploadFile, FastAPI handles the file stream.
filename: The name of the uploaded file.content_type: The file's MIME type (e.g.,image/jpeg).file: A SpooledTemporaryFile object, allowing you to read its contents.
from fastapi import FastAPI, File, UploadFile
import uvicorn
app = FastAPI()
@app.post("/uploadfile/")
async def create_upload_file(file: UploadFile = File(...)):
return {"filename": file.filename, "content_type": file.content_type}
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8000)Saving One Uploaded File
After receiving an UploadFile, you can read its content and save it to a local disk or cloud storage. Here's how to save it locally.
Remember to handle potential errors during file operations.
from fastapi import FastAPI, File, UploadFile
import uvicorn
import shutil
import os
app = FastAPI()
# Ensure the 'files' directory exists
os.makedirs("files", exist_ok=True)
@app.post("/uploadandsave/")
async def upload_and_save_file(file: UploadFile = File(...)):
file_location = f"files/{file.filename}"
with open(file_location, "wb+") as file_object:
shutil.copyfileobj(file.file, file_object)
return {"message": f"File '{file.filename}' saved at '{file_location}'"}
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8000)Uploading Many Files
What if you need to upload several files at once? FastAPI supports this by allowing you to define a parameter as a list of UploadFile.
Each file in the list will be an UploadFile object, which you can then process individually.
from fastapi import FastAPI, File, UploadFile
from typing import List
import uvicorn
app = FastAPI()
@app.post("/uploadmultiple/")
async def create_upload_files(files: List[UploadFile] = File(...)):
uploaded_filenames = [file.filename for file in files]
return {"filenames": uploaded_filenames, "message": "Files received!"}
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8000)Saving Multiple Uploads
Similar to single files, you can iterate through the list of UploadFile objects and save each one. This is useful for photo galleries or document uploads.
Always ensure proper error handling and secure file storage practices in a real application.
from fastapi import FastAPI, File, UploadFile
from typing import List
import uvicorn
import shutil
import os
app = FastAPI()
# Ensure the 'files' directory exists
os.makedirs("files", exist_ok=True)
@app.post("/uploadandsavemultiple/")
async def upload_and_save_multiple_files(files: List[UploadFile] = File(...)):
saved_files = []
for file in files:
file_location = f"files/{file.filename}"
with open(file_location, "wb+") as file_object:
shutil.copyfileobj(file.file, file_object)
saved_files.append(file.filename)
return {"message": f"Successfully uploaded: {', '.join(saved_files)}"}
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8000)Form & File Check
You've learned about handling form data and file uploads. Let's test your understanding!
Lesson Summary
Great job! In this lesson, you mastered how to handle traditional form data and robust file uploads in FastAPI.
- We used
Form(...)for simple key-value form fields. - We explored
UploadFileandFile(...)for single and multiple file uploads. - You learned to save uploaded files to your server.
These techniques are crucial for building interactive web applications. Keep practicing!
Preguntas frecuentes
¿La lección «Datos de formularios y carga de archivos» es gratis?
Sí — el texto completo de «Datos de formularios y carga de archivos» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de FastAPI Backend Development Bootcamp, actualiza a CoddyKit PRO. El curso de FastAPI Backend Development Bootcamp incluye 4 lecciones en total.
¿Qué aprenderé en «Datos de formularios y carga de archivos»?
Gestione datos de formularios HTML tradicionales e implemente cargas de archivos mediante las capacidades integradas de FastAPI. Practicas FastAPI Backend Development Bootcamp con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar FastAPI Backend Development Bootcamp?
No se requiere experiencia previa. FastAPI Backend Development Bootcamp en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.
¿Cuánto tiempo toma la lección «Datos de formularios y carga de archivos»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de FastAPI Backend Development Bootcamp?
Sí. Cada lección de FastAPI Backend Development Bootcamp incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Modelos de Pydantic para el cuerpo de la solicitud
- Modelos de respuesta y códigos de estado
- Datos de formularios y carga de archivos
- Encabezados, cookies y respuestas personalizadas