Added snippet database to the website.
This commit is contained in:
parent
a81cf3a67c
commit
0ab7a9cb67
22 changed files with 825 additions and 118 deletions
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue