Quick Start¶
A Minimal Application¶
A minimal Flask-Generic-Views application looks something like this:
from flask import Flask
from flask_generic_views import TemplateView, RedirectView
app = Flask(__name__)
index = RedirectView('index', url='/home')
app.add_url_rule('/', view_func=index)
home = TemplateView('home', template_name='home.html')
app.add_url_rule('/home', view_func=home)
if __name__ == '__main__':
app.run()
Save this as app.py
, and create a template for your home view to render.
<h1>Hello World</h1>
Save this as templates/home.html
and run the application with your Python
interpreter.
$ python app.py
* Running on http://127.0.0.1:5000/
If you head to http://127.0.0.1:5000/ now you should see the rendered template.
An SQLAlchemy Application¶
from flask import Flask
from flask.ext.generic_views.sqlalchemy import (CreateView,
DeleteView,
DetailView,
ListView,
UpdateView)
from flask.ext.sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db'
app.config['SECRET_KEY'] = '5up3r5ekr3t'
db = SQLAlchemy(app)
class Post(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(80))
body = db.Column(db.Text(120))
created_at = db.Column(db.DateTime, default=datetime.utcnow)
# index
index_view = ListView.as_view('index', model=Post,
ordering=[Post.created_at],
per_page=20)
app.add_url_rule('/', view_func=index_view)
# show
show_view = DetailView.as_view('show', model=Post)
app.add_url_rule('/<int:pk>', view_func=show_view)
# new
new_view = CreateView.as_view('new', model=Post,
fields=('name', 'body'),
success_url='/{id}')
app.add_url_rule('/new', view_func=new_view)
# edit
edit_view = UpdateView.as_view('edit', model=Post,
fields=('name', 'body'),
success_url='/{id}')
app.add_url_rule('/<int:pk>/edit', view_func=edit_view)
# delete
delete_view = DeleteView.as_view('delete', model=Post,
success_url='/')
app.add_url_rule('/<int:pk>/delete', view_func=delete_view)
if __name__ == '__main__':
app.run()