Created
September 15, 2010 14:02
-
-
Save lxneng/580773 to your computer and use it in GitHub Desktop.
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
| # -*- coding: utf-8 -*- | |
| #import pyslideshare | |
| # | |
| #app = Flask(__name__) | |
| # | |
| #api_key = '54lpRVJG' | |
| #secret_key = 'b7Vmgt7f' | |
| #obj = pyslideshare.pyslideshare(locals(), verbose=True) | |
| from datetime import datetime | |
| from flask import Flask, request, flash, url_for, redirect, \ | |
| render_template | |
| from flaskext.sqlalchemy import SQLAlchemy | |
| import default_settings | |
| app = Flask(__name__) | |
| app.config.from_object(default_settings) | |
| db = SQLAlchemy(app) | |
| class Todo(db.Model): | |
| __tablename__ = 'todos' | |
| id = db.Column('todo_id', db.Integer, primary_key=True) | |
| title = db.Column(db.String(60)) | |
| text = db.Column(db.String) | |
| done = db.Column(db.Boolean) | |
| pub_date = db.Column(db.DateTime) | |
| def __init__(self, title, text): | |
| self.title = title | |
| self.text = text | |
| self.done = False | |
| self.pub_date = datetime.utcnow() | |
| @app.route('/', defaults={'page':1}) | |
| @app.route('/<int:page>') | |
| def show_all(page): | |
| pagination = Todo.query.paginate(page=page, per_page=2) | |
| if not pagination.total: flash("No posts so far") | |
| return render_template('show_all.html',pagination=pagination) | |
| @app.route('/new', methods=['GET', 'POST']) | |
| def new(): | |
| if request.method == 'POST': | |
| if not request.form['title']: | |
| flash('Title is required', 'error') | |
| elif not request.form['text']: | |
| flash('Text is required', 'error') | |
| else: | |
| todo = Todo(request.form['title'], request.form['text']) | |
| db.session.add(todo) | |
| db.session.commit() | |
| flash(u'Todo item was successfully created') | |
| return redirect(url_for('show_all')) | |
| return render_template('new.html') | |
| @app.route('/update', methods=['POST']) | |
| def update_done(): | |
| for todo in Todo.query.all(): | |
| todo.done = ('done.%d' % todo.id) in request.form | |
| flash('Updated status') | |
| db.session.commit() | |
| return redirect(url_for('show_all')) | |
| if __name__ == '__main__': | |
| app.run() |
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
| <!doctype html> | |
| <title>SQLAlchemy Todo</title> | |
| <h1>SQLAlchemy Todo</h1> | |
| {%- for category, message in get_flashed_messages(with_categories=true) %} | |
| <p class="flask {{ category }}-flash">{{ | |
| "Error: " if category == 'error' }}{{ message }}</p> | |
| {%- endfor %} | |
| {% block body %}{% endblock %} | |
| <hr> | |
| <address>SQLAlchemy and Flask powered todo application</address> |
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
| {% extends "layout.html" %} | |
| {% block body %} | |
| <h2>New Todo Item</h2> | |
| <form action="" method=post> | |
| <p> | |
| Title: | |
| <input type=text name=title value="{{ request.form.title }}"> | |
| <p>Text: | |
| <p><textarea name=text rows=10 cols=40>{{ request.form.text }}</textarea> | |
| <p> | |
| <input type=submit value="Create entry"> | |
| <a href="{{ url_for('show_all') }}">Back to list</a> | |
| </form> | |
| {% endblock %} |
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
| {% extends "layout.html" %} | |
| {% block body %} | |
| <h2>All Items</h2> | |
| <form action="{{ url_for('update_done') }}" method=post> | |
| <table class=todos> | |
| <tr> | |
| <th>#</th> | |
| <th>Title</th> | |
| <th>Date</th> | |
| <th>Done?</th> | |
| </tr> | |
| {%- for todo in pagination.items %} | |
| <tr class=title> | |
| <td>{{ todo.id }}</td> | |
| <td>{{ todo.title }}</td> | |
| <td><input type=checkbox name=done.{{ todo.id }}{{ " checked" if todo.done }}></td> | |
| </tr> | |
| <tr class=text> | |
| <td colspan=3>{{ todo.text }}</td> | |
| </tr> | |
| {%- endfor %} | |
| </table> | |
| <p> | |
| <input type=submit value="Update" /> | |
| <a href="{{ url_for('new') }}">New item</a> | |
| </p> | |
| </form> | |
| {% if pagination.pages > 1 %} | |
| <div class=pagination> | |
| {%- for page in pagination.iter_pages() %} | |
| {% if page %} | |
| {% if page != pagination.page %} | |
| <a href="{{ url_for('show_all', page=page) }}">{{ page }}</a> | |
| {% else %} | |
| <strong>{{ page }}</strong> | |
| {% endif %} | |
| {% else %} | |
| <span class=ellipsis>…</span> | |
| {% endif %} | |
| {%- endfor %} | |
| </div> | |
| {% endif %} | |
| {% endblock %} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment