Skip to content

Instantly share code, notes, and snippets.

@codesplicer
Created November 9, 2012 12:56
Show Gist options
  • Star 7 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save codesplicer/4045543 to your computer and use it in GitHub Desktop.
Save codesplicer/4045543 to your computer and use it in GitHub Desktop.
flask-mongoengine in a blueprint
# Flask related imports
from flask import Flask, render_template, jsonify, abort, request, make_response, session, redirect, url_for
# Flask extensions
from flask.ext.mongoengine import MongoEngine
from flask_debugtoolbar import DebugToolbarExtension
# Flask blueprints
import companies
from companies.views import companies
# Other imports
import socket
import json
import datetime
import os
from urllib import splitquery, urlencode, quote_plus
from json import dumps as jsondumps
from bson import objectid
# ==============================================================================
#
# SETUP APP
#
# ==============================================================================
app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = settings.UPLOAD_FOLDER
app.config['MONGODB_DB'] = settings.DB_NAME
app.config['MONGODB_HOST'] = settings.DB_HOST
db = MongoEngine(app)
# Register blueprints
def register_blueprints(app):
# Prevents circular imports
app.register_blueprint(companies)
register_blueprints(app)
# Additional route endpoints
@app.route("/")
def home():
return render_template('home.html')
if __name__ == "__main__":
app.debug = True
toolbar = DebugToolbarExtension(app)
app.run()
from flask import Blueprint, request, redirect, render_template, url_for
from flask.views import MethodView
from backend.models import Company, Address
companies = Blueprint('companies', __name__, template_folder='templates')
class ListView(MethodView):
def get(self, search_category):
company_list = Company.objects.all(category=search_category)
return render_template('list.html', companies=company_list)
# Register endpoints
companies.add_url_rule('/company/list/', view_func=ListView.as_view('list'))
import datetime
from flask import url_for
from app import db
class Company(db.Document):
created_at = db.DateTimeField(default=datetime.datetime.now, required=True)
name = db.StringField(max_length=255, required=True)
address = db.EmbeddedDocumentField('Address')
def get_absolute_url(self):
return url_for('company', kwargs={'slug': self.slug})
def __unicode__(self):
return self.name
class Address(db.EmbeddedDocument):
street = db.StringField(verbose_name='Street', required=True)
city = db.StringField(verbose_name='City', required=True)
postcode = db.StringField(verbose_name = 'Post Code', max_length=8, required=True)
@johnschimmel
Copy link

exactly what I was looking for, thank you!

@seanbradley
Copy link

Great! Thanks for the gist! Shouldn't models.py be inside the company blueprint, however? I think typical Flask blueprint structure is...

my_blueprint_directory/
init.py
views.py
models.py

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment