• Stars
    star
    387
  • Rank 110,312 (Top 3 %)
  • Language
    Python
  • Created about 10 years ago
  • Updated about 2 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A best practices approach to creating large web apps, which gives the ease and power of django to your flask app

Flask-XXL

- A best practices approach to creating larger web apps with Flask, in an attempt to make Flask feel like it is as capable, if not more, than Django.

this is an amazing program best in the world PyPI version

Get help on Codementor

Join the chat at https://gitter.im/jstacoder/flask-xxl

to see this in a real world example take a look at my other projects Flask-Cms or Flask-Ide

What this provides:

  • Installable blueprints

    • any blueprints listed in your settings under BLUEPRINTS
      will be imported and registered on your app
      if that blueprint is a package, any files it contains named models.py or views.py will be imported as well,
      so no more need to manualy import your views and models
      giving odd errors if you dont do it in the exact correct order!!
  • basemodels.py

    • with a sqlalchemy compatible BaseMixin class
    • provides many useful CRUD operations, IE: model.save(), model.delete()
    • BaseMixin generates __tablename__ automaticlly
    • BaseMixin adds an auto incrementing id field, as the primary_key to each model
    • BaseMixin.session is current model classes session
    • BaseMixin.engine is the current db engine
    • BaseMixin.query is the models sqlalchemy query from its session
    • BaseMixin.get_all() -> function to return all of a model
    • BaseMixin.get(*args,**kwargs) -> get single model by attr values, mainly for id=x
  • baseviews.py

    • with a BaseView class that is subclassed from Flask.views.MethodView to allow easy definition of view responses to get and post requests.
    • BaseView also has many builtin helpers/imports to speed development, ie:
    • BaseView.render() calls:
      render_template(BaseView._template,**BaseView._context) easily define either or both in the class variable section of the class and then add or change whatever you need to ie: maybe based on logic that happens during request processing.
      for example:
          class ExampleView(BaseView):
              _context = {
                  'some_flag':True,
              }
    
              def get(self,new_flag=False):
                  if new_flag:
                      self._context['new_flag'] = new_flag
                      self._context['some_flag'] = False
                  return self.render()  
                  
  • BaseView.redirect(endpoint) is a reimplementation of flask.helpers.redirect which allows you to directly enter the endpoint, so you dont have to run it through url_for() first.

    • BaseView.get_env() -> returns the current jinja2_env

    • BaseView.form_validated() -> returns true if all forms validate

    • namespaces imported into BaseView: BaseView.flash == flask.flash

  • many builtin template globals(context_processors) to use. ie:

    • get_block(block_id) <-- requires use of flask.ext.xxl.apps.blog
    • add blocks of html/jinja2/template helpers into the db and access from within templates great for things like header navs or sidebar widgets
    • get_icon(icon_name,icon_lib) <-- requires use of flask.ext.xxl.apps.blog

      • flask.ext.xxl.apps.blog comes with 8 icon librarys!!!
        • Glyphicon
        • Font Awesome
        • Mfg_Labs
        • Elusive icons
        • Genericons
        • and more ...

      access any icon anywhere in your templates! even from cms blocks!!!

    • get_model(model_name,blueprint_name)

      • access any model class from any template (currently only supports sqlalchemy models)
    • get_button(name)

      • create buttons in the cms and access from within templates
  • AppFactory class with many hooks into settings file (makes use of settings file similar to django)

    • settings like:
    • CONTEXT_PROCESSORS
    • TEMPLATE_FILTERS
    • URL_ROUTE_MODULES
    • INSTALLED_BLUEPRINTS etc..
  • new revamped url routing scheme, use a urls.py file in each blueprint to define the url routes for the blueprint. reference the blueprint and the url route module in the settings file to registar onto the app upon instantiation.

    define routes like this:

    file: urls.py

          from blueprint import blueprint
          from .views import ViewName,SecondView
    
          routes = [
              ((blueprint_name,)
                  ('/url',ViewName.as_View('view_name')),
                  ('/another',SecondView.as_view('second_view')),
              )
          ]

    it basicly is like using app.add_url_rule() method, you just dont have to add view_func=ViewName.as_view(endpoint) or at least the view_func= part.

  • easily start a new project or extend an old one
    with the flaskxxl-manage.py command line helper tool

    • to start a project from scratch
      $ flaskxxl-manage.py start-project

    • to add to an existing project
      $ flaskxxl-manage.py start-blueprint

Bitdeli Badge

for more fun checkout the wiki

More Repositories

1

flask-cms

a minimal CMS built on the pythonic MTV (model / template / view) pattern, implemented using the flask webframework
JavaScript
137
star
2

flask-ide

browser based file editor, built on flask-xxl -> https://github.com/jstacoder/flask-xxl
JavaScript
40
star
3

flask-angular-blog

blog implemented in flask with angular frontend
JavaScript
15
star
4

graphene-disable-introspection-middleware

a graphene middleware to disable the introspection queries
Python
14
star
5

flask-apps

give your flask application a setting similar to django INSTALLED_APPS, but with more features
Python
14
star
6

it-ebook-dl

a command line tool to search it-ebooks.info and download from there vast selection of pdfs eaisly
Python
5
star
7

flask-angular-blog-example

example heroku app, with flask and angular
JavaScript
4
star
8

paver-pipeline

asset pipeline / builder, similar to Grunt, or Gulp, but built with paver and python
Python
3
star
9

php-wsgi

run your php application through python. Using the wsgi standard route requests from your php app to your php-cgi binary file
Python
3
star
10

python-tenthousand

the dice game 10,000, in python
Python
2
star
11

jstacoder.github.io

My Personal Profile, modeled lightly after github
JavaScript
2
star
12

10TkPy

tkinter gui that uses my minigame library to run a game of dice. 10,000 to be exact. im gonna try doing another gui for it with iron pythons System.Windows.WPF classes well see which is nicer.
Python
1
star
13

flask-orm

default sqlalchemy declarative base for flask apps
Python
1
star
14

sqlalchemy_tutorial

learning about ORM
Python
1
star
15

flask-router

Consolidated routes for flask apps
Python
1
star
16

gatsby-base-docker

base image with gatsby baked in
Dockerfile
1
star
17

bg-dice

dice, boardgame.io
JavaScript
1
star
18

sa-flask-restful-resource

base Resource class, for creating api's with sqlalchemy and flask
Python
1
star
19

flask-stripe-inventory

inventory management flask app, using stripe product api
Python
1
star
20

angular-node-fs

node fs module as angular services and factorys
JavaScript
1
star
21

ez-doc-site-with-docz

The example from a small post about making docs with docz
JavaScript
1
star