12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- 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 "<News(%s)>" % (self.nid)
- @app.route('/')
- def home():
- return 'homepage'
- @app.route('/search/')
- def search_home():
- return 'cerca cerca'
- @app.route('/search/by-month/<int:year>/<int: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/<int:nid>')
- def news_by_nid(nid):
- n = News.query.get(str(nid))
- return redirect(n.canonical_url)
- @app.route('/news/<year>/<month>/<int:nid>.php')
- def news(year, month, nid):
- n = News.query.get(str(nid))
- return render_template('news.html', n=n)
|