Bird
Raised Fist0
Flaskframework~10 mins

Allowed file types validation in Flask - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to define allowed file extensions as a set.

Flask
ALLOWED_EXTENSIONS = [1]
Drag options to blanks, or click blank then click option'
A['png', 'jpg', 'jpeg', 'gif']
B('png', 'jpg', 'jpeg', 'gif')
C"png, jpg, jpeg, gif"
D{'png', 'jpg', 'jpeg', 'gif'}
Attempts:
3 left
💡 Hint
Common Mistakes
Using a list instead of a set slows down membership checks.
Using a string instead of a collection causes errors.
2fill in blank
medium

Complete the function to check if a filename has an allowed extension.

Flask
def allowed_file(filename):
    return '.' in filename and filename.rsplit('.', 1)[1].[1]() in ALLOWED_EXTENSIONS
Drag options to blanks, or click blank then click option'
Alower
Bupper
Cstartswith
Dendswith
Attempts:
3 left
💡 Hint
Common Mistakes
Using startswith or endswith instead of lower.
Not converting to lowercase causes case sensitivity issues.
3fill in blank
hard

Fix the error in the file upload route to validate file type correctly.

Flask
from flask import request, redirect, url_for

@app.route('/upload', methods=['POST'])
def upload_file():
    file = request.files.get('file')
    if file and allowed_file(file.filename):
        filename = secure_filename(file.filename)
        file.save(os.path.join(app.config['UPLOAD_FOLDER'], [1]))
        return redirect(url_for('uploaded_file', filename=filename))
    return 'Invalid file type', 400
Drag options to blanks, or click blank then click option'
Afilename
Bfile.filename
Cfile
Drequest.filename
Attempts:
3 left
💡 Hint
Common Mistakes
Using file.filename directly without securing it.
Using file or request.filename which are incorrect.
4fill in blank
hard

Fill both blanks to create a dictionary comprehension filtering allowed files and mapping to their extensions.

Flask
files = ['image.png', 'doc.pdf', 'photo.jpg']
allowed_files = {f: f.[1]('.', 1)[1].[2]() for f in files if '.' in f and f.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS}
Drag options to blanks, or click blank then click option'
Arsplit
Bsplit
Cupper
Dlower
Attempts:
3 left
💡 Hint
Common Mistakes
Using split instead of rsplit may cause wrong splits.
Using upper instead of lower causes mismatch with allowed extensions.
5fill in blank
hard

Fill all three blanks to define a Flask route that accepts file uploads and validates allowed types.

Flask
@app.route('/upload', methods=[[1]])
def upload():
    file = request.files.get('file')
    if file and allowed_file(file.[2]):
        filename = secure_filename(file.filename)
        file.save(os.path.join(app.config['UPLOAD_FOLDER'], [3]))
        return 'File uploaded successfully'
    return 'Invalid file type', 400
Drag options to blanks, or click blank then click option'
A'POST'
Bfilename
D'GET'
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'GET' instead of 'POST' for upload route.
Using wrong attribute instead of file.filename.
Confusing variable names for saving the file.

Practice

(1/5)
1. What is the main purpose of validating allowed file types in a Flask upload feature?
easy
A. To compress files before saving
B. To speed up the file upload process
C. To automatically rename files on upload
D. To ensure only safe and expected file formats are accepted

Solution

  1. Step 1: Understand file upload risks

    Uploading files without validation can allow harmful files that may damage the server or application.
  2. Step 2: Purpose of allowed file types

    Checking allowed file types restricts uploads to safe, expected formats, reducing security risks.
  3. Final Answer:

    To ensure only safe and expected file formats are accepted -> Option D
  4. Quick Check:

    Allowed file types = safety [OK]
Hint: Allowed types protect from unsafe uploads [OK]
Common Mistakes:
  • Thinking validation speeds upload
  • Confusing validation with renaming
  • Assuming validation compresses files
2. Which of the following is the correct way to check if a filename has an allowed extension in Flask?
easy
A. if filename.split('.')[-1] in allowed_extensions:
B. if filename.endswith(allowed_extensions):
C. if filename in allowed_extensions:
D. if allowed_extensions.contains(filename):

Solution

  1. Step 1: Extract file extension correctly

    Splitting the filename by '.' and taking the last part gets the extension.
  2. Step 2: Check extension in allowed set

    Using 'in' checks if the extension is in the allowed_extensions set.
  3. Final Answer:

    if filename.split('.')[-1] in allowed_extensions: -> Option A
  4. Quick Check:

    Split and check extension [OK]
Hint: Split filename by '.' and check last part [OK]
Common Mistakes:
  • Using endswith with a set (wrong syntax)
  • Checking whole filename in allowed extensions
  • Using non-existent 'contains' method
3. Given this Flask snippet, what will be the output if the uploaded file is named photo.png and allowed_extensions = {'png', 'jpg'}?
filename = 'photo.png'
if filename.split('.')[-1] in allowed_extensions:
    result = 'Allowed'
else:
    result = 'Not Allowed'
medium
A. Allowed
B. Not Allowed
C. Error: split method missing
D. Error: allowed_extensions undefined

Solution

  1. Step 1: Extract extension from filename

    Splitting 'photo.png' by '.' gives ['photo', 'png'], last part is 'png'.
  2. Step 2: Check if extension is allowed

    'png' is in the set {'png', 'jpg'}, so condition is True and result is 'Allowed'.
  3. Final Answer:

    Allowed -> Option A
  4. Quick Check:

    Extension 'png' in allowed set [OK]
Hint: Check last part after '.' in allowed set [OK]
Common Mistakes:
  • Confusing filename with extension
  • Assuming split returns error
  • Forgetting to define allowed_extensions
4. Identify the error in this Flask file validation code:
allowed_extensions = {'txt', 'pdf'}
filename = 'report.pdf'
if filename.split('.')[-1] == allowed_extensions:
    print('File allowed')
else:
    print('File not allowed')
medium
A. allowed_extensions should be a list, not a set
B. filename.split('.')[-1] is incorrect syntax
C. Using '==' instead of 'in' to check extension
D. Missing import for split function

Solution

  1. Step 1: Understand the comparison

    The code compares a string (extension) to a set using '==', which is always False.
  2. Step 2: Correct way to check membership

    Use 'in' operator to check if extension is inside allowed_extensions set.
  3. Final Answer:

    Using '==' instead of 'in' to check extension -> Option C
  4. Quick Check:

    Use 'in' for membership check [OK]
Hint: Use 'in' to check if extension is allowed [OK]
Common Mistakes:
  • Using '==' instead of 'in'
  • Thinking split needs import
  • Confusing set with list requirement
5. You want to allow only image files with extensions 'png', 'jpg', and 'jpeg' in your Flask app. Which code snippet correctly validates the uploaded file's extension and handles the case where the filename has no extension?
hard
A. allowed = {'png', 'jpg', 'jpeg'} if filename.endswith(tuple(allowed)): save_file() else: reject_file()
B. allowed = {'png', 'jpg', 'jpeg'} if '.' in filename and filename.rsplit('.', 1)[1].lower() in allowed: save_file() else: reject_file()
C. allowed = ['png', 'jpg', 'jpeg'] if filename.split('.')[-1] in allowed: save_file() else: reject_file()
D. allowed = {'png', 'jpg', 'jpeg'} if filename.split('.')[1] in allowed: save_file() else: reject_file()

Solution

  1. Step 1: Check for presence of extension

    Using '.' in filename ensures the file has an extension to avoid errors.
  2. Step 2: Extract extension safely and check membership

    Using rsplit('.', 1)[1].lower() gets the extension after the last dot, then checks if it's in allowed set.
  3. Step 3: Handle saving or rejecting file

    If extension is allowed, call save_file(), else reject_file().
  4. Final Answer:

    allowed = {'png', 'jpg', 'jpeg'} if '.' in filename and filename.rsplit('.', 1)[1].lower() in allowed: save_file() else: reject_file() -> Option B
  5. Quick Check:

    Check dot, split once from right, then 'in' allowed [OK]
Hint: Check '.' then rsplit once, then 'in' allowed [OK]
Common Mistakes:
  • Not checking if filename has '.' before splitting
  • Using split without limit causing errors
  • Using endswith with tuple but missing case normalization
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard