Created
April 18, 2009 18:21
-
-
Save dirk/97722 to your computer and use it in GitHub Desktop.
Extremely simple Constrictor app, connects to database, grabs the user table, and returns a list of users.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Suggested directory structure: | |
# /myapp/this_file.py | |
# /constrictor | |
# This is to load the path above it to add constrictor directory to the path. | |
import os, sys | |
sys.path.append(os.path.join(os.getcwd(), os.pardir)) | |
# Recommended to make pathing easier. (Note: Requires os module) | |
from constrictor.utils import set_path | |
set_path(os.getcwd()) | |
# Load constrictor's MySQL ORM system. | |
from constrictor.database import mysql | |
# Connect to the database. | |
database = mysql.mysql('localhost', 'root', '', 'blog') | |
# New version, not as elegant, but more functional and understandable. | |
class UserModel(mysql.model): | |
table = 'users' | |
structure = [ | |
mysql.fields.integer('id', primary = True, null = False, auto_increment = True), | |
mysql.fields.string('username', length = 32), | |
mysql.fields.string('password', length = 32), | |
mysql.fields.string('fullname', length = 32), | |
mysql.fields.string('email', length = 32), | |
mysql.fields.string('website', length = 32), | |
# Password is a special fields used to make working with passwords easier. | |
# Algorithm can either be a string defining a standard hash or a class that | |
# that acts like a standard hashlib library | |
# mysql.fields.password('password', algorithm = 'sha256') | |
#mysql.fields.boolean('is_admin', null = False) | |
] | |
# Actually registering the model with the database system. | |
database.register.model(UserModel) | |
#u = UserModel() | |
# A test query. | |
#result = database.query('SELECT * FROM users') | |
# Import constrictor and other stuff (Expose, etc.) | |
from constrictor.core import * | |
# Initialize a new constrictor instance. | |
constrictor = Constrictor() | |
view = """ | |
<html> | |
<head><title>Test</title></head> | |
<body> | |
Users: | |
<%? | |
for user in result: | |
OUTPUT(str('<b>' + user.username + '</b><br/ >')) | |
%> | |
</body> | |
</html> | |
""" | |
class Controller(Constrictor.Controller): | |
@Expose | |
def method(self, req, args): | |
print "second!" | |
from constrictor.template import repl | |
result = database.query('SELECT * FROM users') | |
template = repl.repl() | |
return (200, template.render(view, locals())) | |
@Filter.Before | |
def method2(self, req, args): | |
#print self | |
#print req | |
#print args | |
print "first!" | |
@Filter.After | |
def method3(self, req, args): | |
print "third!" | |
c = Controller() | |
constrictor.routes = [ | |
Constrictor.Route(r'^/([A-z0-9-_]+)/?([A-z0-9-_]+)?/?', Controller.method), | |
Constrictor.Route(r'^/$', Controller.method) | |
] | |
# Import and start the actual server | |
from constrictor.server.core import Server | |
server = Server('localhost', 8080, constrictor, False) | |
# Remembering to close the connection. | |
database.close() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment