Added snippet database to the website.

This commit is contained in:
Armin Ronacher 2010-05-03 11:20:52 +02:00
parent a81cf3a67c
commit 0ab7a9cb67
22 changed files with 825 additions and 118 deletions

View file

@ -1,4 +1,7 @@
from flask import Module, render_template
from flask import Module, render_template, session, redirect, url_for, \
request, flash, g, Response
from flask_website import openid_auth
from flask_website.database import db_session, User
general = Module(__name__)
@ -6,3 +9,42 @@ general = Module(__name__)
@general.route('/')
def index():
return render_template('general/index.html')
@general.route('/logout/')
def logout():
if 'openid' in session:
flash(u'Logged out')
del session['openid']
return redirect(request.referrer or url_for('general.index'))
@general.route('/login/', methods=['GET', 'POST'])
def login():
if g.user is not None:
return redirect(url_for('general.index'))
rv = openid_auth.check_return_from_provider()
if rv is not None:
return rv
if request.method == 'POST':
openid = request.values.get('openid')
if openid:
return openid_auth.login(openid)
return render_template('general/login.html')
@general.route('/first-login/', methods=['GET', 'POST'])
def first_login():
if g.user is not None or 'openid' not in session:
return redirect(url_for('login'))
if request.method == 'POST':
if 'cancel' in request.form:
del session['openid']
flash(u'Login was aborted')
return redirect(url_for('general.login'))
db_session.add(User(request.form['name'], session['openid']))
db_session.commit()
flash(u'Successfully created profile and logged in')
return openid_auth.redirect_back()
return render_template('general/first_login.html',
openid=session['openid'])

View file

@ -1,8 +1,116 @@
from flask import Module, render_template
from flask import Module, render_template, request, flash, abort, redirect, \
g, url_for
from flask_website.utils import requires_login, format_creole
from flask_website.database import Category, Snippet, Comment, db_session
snippets = Module(__name__, url_prefix='/snippets')
@snippets.route('/')
def index():
return render_template('snippets/index.html')
return render_template('snippets/index.html',
categories=Category.query.order_by(Category.name).all(),
recent=Snippet.query.order_by(Snippet.pub_date.desc()).limit(5).all())
@snippets.route('/new/', methods=['GET', 'POST'])
@requires_login
def new():
category_id = None
preview = None
if 'category' in request.args:
rv = Category.query.filter_by(slug=request.args['category']).first()
if rv is not None:
category_id = rv.id
if request.method == 'POST':
if 'preview' in request.form:
preview = format_creole(request.form['body'])
else:
title = request.form['title']
body = request.form['body']
category_id = request.form.get('category', type=int)
if not body:
flash(u'Error: you have to enter a snippet')
else:
category = Category.query.get(category_id)
if category is not None:
snippet = Snippet(g.user, title, body, category)
db_session.add(snippet)
db_session.commit()
flash(u'Your snippet was added')
return redirect(snippet.url)
return render_template('snippets/new.html',
categories=Category.query.order_by(Category.name).all(),
active_category=category_id, preview=preview)
@snippets.route('/<int:id>/', methods=['GET', 'POST'])
def show(id):
snippet = Snippet.query.get(id)
if snippet is None:
abort(404)
if request.method == 'POST':
title = request.form['title']
text = request.form['text']
if not title:
flash(u'Error: the title is required')
elif not text:
flash(u'Error: the text is required')
else:
db_session.add(Comment(snippet, g.user, title, text))
db_session.commit()
flash(u'Your comment was added')
return redirect(snippet.url)
return render_template('snippets/show.html', snippet=snippet)
@snippets.route('/edit/<int:id>/', methods=['GET', 'POST'])
@requires_login
def edit(id):
snippet = Snippet.query.get(id)
if snippet is None:
abort(404)
if snippet.author != g.user:
abort(401)
preview = None
form = dict(title=snippet.title, body=snippet.body,
category=snippet.category.id)
if request.method == 'POST':
form['title'] = request.form['title']
form['body'] = request.form['body']
form['category'] = request.form.get('category', type=int)
if 'preview' in request.form:
preview = format_creole(request.form['body'])
elif 'delete' in request.form:
for comment in snippet.comments:
db_session.delete(comment)
db_session.delete(snippet)
db_session.commit()
flash(u'Your snippet was deleted')
return redirect(url_for('snippets.index'))
else:
category_id = request.form.get('category', type=int)
if not form['body']:
flash(u'Error: you have to enter a snippet')
else:
category = Category.query.get(category_id)
if category is not None:
snippet.title = form['title']
snippet.body = form['body']
snippet.category = category
db_session.commit()
flash(u'Your snippet was modified')
return redirect(snippet.url)
return render_template('snippets/edit.html',
snippet=snippet, preview=preview, form=form,
categories=Category.query.order_by(Category.name).all())
@snippets.route('/category/<slug>/')
def category(slug):
category = Category.query.filter_by(slug=slug).first()
if category is None:
abort(404)
snippets = category.snippets.order_by(Snippet.title).all()
return render_template('snippets/category.html', category=category,
snippets=snippets)