import sqlite3 from datetime import datetime from flask import Flask, render_template, redirect, url_for, request from flask_sqlalchemy import SQLAlchemy from flask_paginate import Pagination # from sqlalchemy import Column, Integer, String # from sqlalchemy.ext.declarative import declarative_base app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///news.db' db = SQLAlchemy(app) class News(db.Model): __tablename__ = 'news' nid = db.Column(db.String, primary_key=True) author = db.Column(db.Unicode) title = db.Column(db.Unicode) body = db.Column(db.Unicode) published = db.Column(db.String) last_modified = db.Column(db.String) display = db.Column(db.Unicode) @property def canonical_url(self): return url_for('news', year=self.published_datetime.year, month=self.published_datetime.month, nid=self.nid) @property def published_datetime(self): return datetime.fromtimestamp(self.published) @property def published_str(self): return str(self.published_datetime) def __repr__(self): return "" % (self.nid) @app.route('/') def home(): return 'homepage' @app.route('/search/') def search_home(): return 'cerca cerca' @app.route('/search/by-month//') def search_by_month(year, month): # TODO: proper pagination page = int(request.args.get('page', '1')) - 1 first = page * 50 last = first + 50 d = datetime(year=year, month=month, day=1) ts_from = int(d.timestamp()) if month < 12: d = datetime(year=year, month=month+1, day=1) else: d = datetime(year=year+1, month=1, day=1) ts_to = int(d.timestamp()) news = News.query.filter(News.published >= ts_from, News.published < ts_to).order_by('published') pagination = Pagination(page=page, total=news.count(), per_page=50) news = news[first:last] return render_template('search_results.html', results=news, pagination=pagination) @app.route('/news/') def news_by_nid(nid): n = News.query.get(str(nid)) return redirect(n.canonical_url) @app.route('/news///.php') def news(year, month, nid): n = News.query.get(str(nid)) return render_template('news.html', n=n)