Assets

(refer to flask-base/app/assets.py)

See app/init.py for details on this

context is set as the assets/styles and assetts/scripts folders

filter = scss -> convers .scss to css filter = jsmin -> converts to minified javascript

Bundle is just the plugin that helps us do this task.

Decorators

def permission_required(permission):
    """Restrict a view to users with the given permission."""
    def decorator(f):
        @wraps(f)
        def decorated_function(*args, **kwargs):
            if not current_user.can(permission):
                abort(403)
            return f(*args, **kwargs)
        return decorated_function
    return decorator

This is a rather complicated function, but the general idea is that it will allow is to create a decorator that will kick users to a 403 page if they dont have a certain permission or let them continue. First there is a permission_required method which takes in a permission e.g. Permission.ADMINISTER Then it create a function called 'decorator' which performs the check in a separate function itself decorates called 'decorated_function'. It returns the result from 'decorate_function' as well as the results from a specified parameter f that serves as an extra function call. The @wraps(f) decorator is itself used to give context for the decorated function and actually point that context towards the fully decorated function when the permission_required() decorator is invoked. Tl;dr it does some complicated stuff you don't really need to know about

@admin_required

def admin_required(f):
    return permission_required(Permission.ADMINISTER)(f)

This is a decorator created by the permission required decorator It checks if the current_user is an admin or not. It takes in a function f as the next action to occur after the check happens however in practice, we only use the decorator @admin_required on routes.