Fading Coder

One Final Commit for the Last Sprint

Home > Tech > Content

Flask Framework Core Concepts and Implementation

Tech May 9 3

Documentation Resources

Requirements File Management

In a virtual environment, generate dependencise with version numbers:

pip freeze > requirements.txt

Example requirements.txt content:

Flask==0.10.1
Jinja2==2.9.6
Werkzeug==0.12.2
SQLAlchemy==1.1.10
Flask-SQLAlchemy==2.2
Flask-Migrate==2.0.4
Flask-Login==0.4.0
Flask-WTF==0.14.2
click==6.7
itsdangerous==0.24

To recreate the exact environment:

pip install -r requirements.txt

Basic Flask Application Structure

from flask import Flask

application = Flask(__name__)

@application.route("/")
def home():
    return "Welcome"

if __name__ == '__main__':
    print(application.url_map)
    application.run()

Route Configuration Methods

HTTP Method Restrictions

from flask import Flask

app = Flask(__name__)

@app.route("/", methods=["POST"])
def process_data():
    return "Processing POST request"

Route Parameter Handling

@app.route("/user/<user_id>")
def user_profile(user_id):
    return f"User ID: {user_id}"

@app.route("/number/<int:num_id>")
def number_handler(num_id):
    return f"Number ID: {num_id}"

Response Types

Redirects

from flask import Flask, redirect

app = Flask(__name__)

@app.route('/')
def redirect_example():
    return redirect('http://example.com')

JSON Responses

from flask import Flask, jsonify

app = Flask(__name__)

@app.route("/")
def json_response():
    data = {"status": "success", "message": "Hello"}
    return jsonify(data)

Custom Route Converters

from flask import Flask
from werkzeug.routing import BaseConverter

class CustomConverter(BaseConverter):
    def __init__(self, map, *args):
        super().__init__(map)
        self.regex = args[0]

app = Flask(__name__)
app.url_map.converters["custom"] = CustomConverter

@app.route('/pattern/<custom("[0-9]{3}"):pattern_id>')
def pattern_matcher(pattern_id):
    return f"Matched pattern: {pattern_id}"

Status Code Handling

from flask import Flask, abort

app = Flask(__name__)

@app.route('/custom-status')
def custom_status():
    return 'Custom status', 201

@app.route('/not-found')
def not_found():
    abort(404)

@app.errorhandler(404)
def handle_404(error):
    return "Resource not found", 404

Request Hooks

from flask import Flask

app = Flask(__name__)

@app.before_first_request
def initialize():
    print("Initial setup before first request")

@app.before_request
def pre_request():
    print("Executing before each request")

@app.after_request
def post_request(response):
    print("Executing after successful request")
    return response

@app.teardown_request
def cleanup(error):
    print("Cleanup after request completion")

State Management

Cookies

from flask import Flask, make_response, request

app = Flask(__name__)

@app.route('/set-cookie')
def set_cookie():
    response = make_response('Cookie set')
    response.set_cookie("session_token", "abc123")
    return response

@app.route('/get-cookie')
def get_cookie():
    token = request.cookies.get("session_token")
    return token

Sessions

from flask import Flask, session, redirect, url_for

app = Flask(__name__)
app.secret_key = "secure_key"

@app.route('/login')
def login():
    session['user_id'] = 'user123'
    return redirect(url_for('profile'))

@app.route('/profile')
def profile():
    return session.get('user_id', 'No user logged in')

Context Objects

Application Context

from flask import Flask, current_app, g

app = Flask(__name__)

@app.route('/')
def app_info():
    return f"App name: {current_app.name}"

Global Context Variable

def auth_required(func):
    def wrapper(*args, **kwargs):
        g.user_id = "authenticated_user"
        return func(*args, **kwargs)
    return wrapper

@app.route('/')
@auth_required
def protected_route():
    user_id = g.user_id
    return f"User: {user_id}"

Related Articles

Understanding Strong and Weak References in Java

Strong References Strong reference are the most prevalent type of object referencing in Java. When an object has a strong reference pointing to it, the garbage collector will not reclaim its memory. F...

Comprehensive Guide to SSTI Explained with Payload Bypass Techniques

Introduction Server-Side Template Injection (SSTI) is a vulnerability in web applications where user input is improper handled within the template engine and executed on the server. This exploit can r...

Implement Image Upload Functionality for Django Integrated TinyMCE Editor

Django’s Admin panel is highly user-friendly, and pairing it with TinyMCE, an effective rich text editor, simplifies content management significantly. Combining the two is particular useful for bloggi...

Leave a Comment

Anonymous

◎Feel free to join the discussion and share your thoughts.