1
|
|
|
from time import sleep |
2
|
|
|
|
3
|
|
|
import click |
4
|
|
|
from datatables import ColumnDT, DataTables |
5
|
|
|
from flask import Flask, jsonify, render_template, request |
6
|
|
|
from flask_tut.models import Address, User, db |
7
|
|
|
|
8
|
|
|
app = Flask(__name__) |
9
|
|
|
app.config.from_pyfile('../app.cfg') |
10
|
|
|
db.init_app(app) |
11
|
|
|
|
12
|
|
|
|
13
|
|
|
@app.cli.command() |
14
|
|
|
def initdb(): |
15
|
|
|
"""Initialize the database.""" |
16
|
|
|
click.echo('Init the db...') |
17
|
|
|
db.create_all() |
18
|
|
|
|
19
|
|
|
for i in range(30): |
20
|
|
|
click.echo("Creating user/address combo #{}...".format(i)) |
21
|
|
|
address = Address(description='Address#2' + str(i).rjust(2, "0")) |
22
|
|
|
db.session.add(address) |
23
|
|
|
user = User(name='User#1' + str(i).rjust(2, "0")) |
24
|
|
|
user.address = address |
25
|
|
|
db.session.add(user) |
26
|
|
|
sleep(1) |
27
|
|
|
db.session.commit() |
28
|
|
|
|
29
|
|
|
|
30
|
|
|
@app.route("/") |
31
|
|
|
def home(): |
32
|
|
|
"""Try to connect to database, and list available examples.""" |
33
|
|
|
return render_template('home.html', project='flask_tut') |
34
|
|
|
|
35
|
|
|
|
36
|
|
|
@app.route("/dt_110x") |
37
|
|
|
def dt_110x(): |
38
|
|
|
"""List users with DataTables <= 1.10.x.""" |
39
|
|
|
return render_template('dt_110x.html', project='dt_110x') |
40
|
|
|
|
41
|
|
|
|
42
|
|
|
@app.route('/data') |
43
|
|
|
def data(): |
44
|
|
|
"""Return server side data.""" |
45
|
|
|
# defining columns |
46
|
|
|
columns = [ |
47
|
|
|
ColumnDT(User.id), |
48
|
|
|
ColumnDT(User.name), |
49
|
|
|
ColumnDT(Address.description), |
50
|
|
|
ColumnDT(User.created_at) |
51
|
|
|
] |
52
|
|
|
|
53
|
|
|
# defining the initial query depending on your purpose |
54
|
|
|
query = db.session.query().select_from(User).join(Address).filter( |
55
|
|
|
Address.id > 14) |
56
|
|
|
|
57
|
|
|
# GET parameters |
58
|
|
|
params = request.args.to_dict() |
59
|
|
|
|
60
|
|
|
# instantiating a DataTable for the query and table needed |
61
|
|
|
rowTable = DataTables(params, query, columns) |
62
|
|
|
|
63
|
|
|
# returns what is needed by DataTable |
64
|
|
|
return jsonify(rowTable.output_result()) |
65
|
|
|
|