-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.py
121 lines (103 loc) · 3.44 KB
/
app.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
import os
from flask import Flask, request, session, g, redirect, url_for, \
abort, render_template, flash, jsonify
from flask_sqlalchemy import SQLAlchemy
# Get the folder where this file runs
basedir = os.path.abspath(os.path.dirname(__file__))
# Configuration
DATABASE = 'flaskr.db'
DEBUG = True
SECRET_KEY = 'son_of_a_gun'
USERNAME = 'admin'
PASSWORD = 'admin'
# Define the full path for the Database
DATABASE_PATH = os.path.join(basedir, DATABASE)
# Database config
SQLALCHEMY_DATABASE_URI = 'sqlite:///' + DATABASE_PATH
SQLALCHEMY_TRACK_MODIFICATIONS = False
# Create and initialize app
app = Flask(__name__)
app.config.from_object(__name__)
db = SQLAlchemy(app)
import models
'''
# Connect to Database
def connect_db():
rv = sqlite3.connect(app.config['DATABASE'])
rv.row_factory = sqlite3.Row
return rv
# Create the Database
def init_db():
with app.app_context():
db = get_db()
with app.open_resource('schema.sql', mode='r') as f:
db.cursor().executescript(f.read())
db.commit()
# Open Database Connection
def get_db():
if not hasattr(g, 'sqlite_db'):
g.sqlite_db = connect_db()
return g.sqlite_db
# Close Database Connection
@app.teardown_appcontext
def close_db(error):
if hasattr(g, 'sqlite_db'):
g.sqlite_db.close()
'''
@app.route('/')
def index():
# Searches the database for entries, then displays them
entries = db.session.query(models.Flaskr)
return render_template('index.html', entries=entries)
@app.route('/add', methods=['POST'])
def add_entry():
'''Add new post to database'''
if not session.get('logged_in'):
abort(401)
new_entry = models.Flaskr(request.form['title'], request.form['text'])
db.session.add(new_entry)
db.session.commit()
flash('New entry was successfully posted')
return redirect(url_for('index'))
@app.route('/login', methods=['GET', 'POST'])
def login():
# User login/authentication/session management
error = None
if request.method == 'POST':
if request.form['username'] != app.config['USERNAME']:
error = 'Invalid username'
elif request.form['password'] != app.config['PASSWORD']:
error = 'Invalid password'
else:
session['logged_in'] = True
flash('You were successfully logged in')
return redirect(url_for('index'))
return render_template('login.html', error=error)
@app.route('/logout')
def logout():
#User logout/authentication/session management
session.pop('logged_in', None)
flash('You were successfully logged out')
return redirect(url_for('index'))
@app.route('/delete/<int:post_id>', methods=['GET'])
def delete_entry(post_id):
'''Delete post from database'''
result = {'status': 0, 'message': 'Error'}
try:
new_id = post_id
db.session.query(models.Flaskr).filter_by(post_id=new_id).delete()
db.session.commit()
result = {'status': 1, 'message': 'Post Deleted'}
flash('The entry was deleted.')
except Exception as e:
result = {'status': 0, 'message': repr(e)}
return jsonify(result)
@app.route('/search/', methods=['GET'])
def search():
query = request.args.get('query')
entries = db.session.query(models.Flaskr)
if query:
return render_template('search.html', entries=entries, query=query)
return render_template('search.html')
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5050)