Serving images lets your web app show pictures to users. It makes your site more interesting and useful.
Serving images in Flask
Introduction
Syntax
Flask
from flask import Flask, send_from_directory app = Flask(__name__) @app.route('/images/<filename>') def serve_image(filename): return send_from_directory('images', filename)
send_from_directory sends files from a folder safely.
The folder name is relative to your app's root folder.
Examples
static/img using a URL path /img/filename.Flask
from flask import Flask, send_from_directory app = Flask(__name__) @app.route('/img/<filename>') def image(filename): return send_from_directory('static/img', filename)
send_file.Flask
from flask import Flask, send_file app = Flask(__name__) @app.route('/logo') def logo(): return send_file('static/logo.png', mimetype='image/png')
Sample Program
This app shows a simple page with an image. The image is served from the images folder on the server.
Flask
from flask import Flask, send_from_directory app = Flask(__name__) @app.route('/') def home(): return ''' <html> <body> <h1>Welcome!</h1> <img src="/images/sample.jpg" alt="Sample Image" /> </body> </html> ''' @app.route('/images/<filename>') def serve_image(filename): return send_from_directory('images', filename) if __name__ == '__main__': app.run(debug=True)
Important Notes
Put your images in the folder you specify (here, 'images').
Use alt text in <img> tags for accessibility.
For production, consider using a web server or CDN to serve images efficiently.
Summary
Serving images lets your Flask app show pictures to users.
Use send_from_directory to serve image files from a folder.
Make sure images are in the right folder and use proper URLs in your HTML.
Practice
1. What is the main purpose of using
send_from_directory in a Flask app when serving images?easy
Solution
Step 1: Understand the role of
This function is designed to send files stored in a folder on the server to the client browser.send_from_directoryStep 2: Identify its use with images
When serving images, it helps Flask deliver image files from a folder to display in the browser.Final Answer:
To send image files from a specific folder to the user's browser -> Option AQuick Check:
send_from_directory serves files = D [OK]
Hint: Remember: send_from_directory sends files from folders [OK]
Common Mistakes:
- Thinking it creates or modifies images
- Confusing it with file upload functions
- Assuming it converts image formats
2. Which of the following is the correct way to import
send_from_directory in a Flask app?easy
Solution
Step 1: Recall Flask import syntax
Flask functions are imported usingfrom flask import function_name.Step 2: Match the function name
The correct function name issend_from_directory, so the import isfrom flask import send_from_directory.Final Answer:
from flask import send_from_directory -> Option BQuick Check:
Correct import syntax = B [OK]
Hint: Use 'from flask import function' to import Flask helpers [OK]
Common Mistakes:
- Using 'import send_from_directory from flask' (wrong syntax)
- Importing send_file instead of send_from_directory
- Importing from flask.static which doesn't contain it
3. Given this Flask route code, what will happen when accessing
/image/cat.png if the file exists in the 'static/images' folder?from flask import Flask, send_from_directory
app = Flask(__name__)
@app.route('/image/<filename>')
def image(filename):
return send_from_directory('static/images', filename)medium
Solution
Step 1: Analyze the route and function
The route captures a filename and uses send_from_directory to send that file from 'static/images'.Step 2: Check the file existence and response
If 'cat.png' exists in 'static/images', Flask will send it to the browser to display.Final Answer:
The image 'cat.png' will be sent and displayed in the browser -> Option AQuick Check:
send_from_directory sends existing files = A [OK]
Hint: If file exists in folder, send_from_directory serves it [OK]
Common Mistakes:
- Assuming route syntax is wrong
- Confusing sending with uploading
- Expecting server crash without syntax errors
4. Identify the error in this Flask code snippet meant to serve images from 'images' folder:
from flask import Flask, send_from_directory
app = Flask(__name__)
@app.route('/img/<filename>')
def img(filename):
return send_from_directory('image', filename)medium
Solution
Step 1: Check folder name consistency
The route suggests images are in 'images' folder, but code uses 'image' (singular), likely a typo causing file not found.Step 2: Verify other parts
Imports and route syntax are correct; function name is valid in Python.Final Answer:
The folder name 'image' is likely incorrect; should be 'images' -> Option DQuick Check:
Folder name mismatch causes errors = C [OK]
Hint: Check folder names carefully for typos [OK]
Common Mistakes:
- Assuming function names must be special
- Thinking route syntax is wrong
- Ignoring folder name typos
5. You want to serve user-uploaded images stored in a folder outside your Flask app directory called
/var/www/uploads. Which is the best way to serve these images securely?hard
Solution
Step 1: Understand serving files outside app folder
Flask's send_from_directory can serve files from any folder if given the full path.Step 2: Importance of filename validation
To avoid security risks, validate filenames to prevent path traversal attacks.Step 3: Evaluate other options
Copying files is inefficient; direct linking won't work without web server config; send_file without checks is unsafe.Final Answer:
Use send_from_directory('/var/www/uploads', filename) in a route with filename validation -> Option CQuick Check:
Secure serving outside app folder = A [OK]
Hint: Use send_from_directory with validation for external folders [OK]
Common Mistakes:
- Serving files without validating filename
- Linking directly to server paths in HTML
- Copying files unnecessarily
Recommended
Ready to prove it?
Pass the test and this pattern moves unknown
10 questions ~5 mineasy hard
