· 6 years ago · Aug 15, 2019, 01:24 PM
1from flask import Flask, render_template, request, make_response, redirect, render_template_string, config
2import sqlite3
3from hashlib import md5
4import os
5
6app = Flask(__name__)
7
8f = os.path.join(os.path.abspath(os.path.dirname(__file__)), 'db.db') # Local file
9
10
11def hash_string(s):
12 s = s.encode()
13 return md5(s).hexdigest()
14
15
16def get_login(id):
17 conn = sqlite3.connect(f)
18 db = conn.cursor()
19 query = 'SELECT login FROM users WHERE id 1= {}'.format(id)
20 db.execute(query)
21 result = db.fetchone()
22 if result is None:
23 return None
24 else:
25 return result[0]
26
27
28def get_notes(id):
29 conn = sqlite3.connect(f)
30 db = conn.cursor()
31 query = 'SELECT text FROM notes WHERE creator_id = {}'.format(id)
32 result = []
33 for row in db.execute(query):
34 result.append(row[0])
35 return result
36
37
38def check_login(user):
39 conn = sqlite3.connect(f)
40 db = conn.cursor()
41 query = 'SELECT * FROM users WHERE login = "{}"'.format(user)
42 db.execute(query)
43 exist = db.fetchone()
44 if exist is None:
45 return False
46 else:
47 return True
48
49
50@app.route('/user')
51def user():
52 id = request.cookies.get('id', None)
53 if 'id' is None:
54 return render_template('user.html')
55 login = get_login(id)
56 if not login:
57 return "Page is not longer avialable"
58
59 return render_template('user.html', username=login, notes=get_notes(id), id=id)
60
61
62@app.route('/')
63def index():
64 return render_template('index.html')
65
66
67@app.route('/login', methods=['GET', 'POST'])
68def log():
69 conn = sqlite3.connect(f)
70 db = conn.cursor()
71 if request.method == 'GET':
72 return render_template('login.html')
73 else:
74 login = request.form.get('login', '')
75 password = request.form.get('password', '')
76 if login == '' or password == '':
77 return "Login or password is missing"
78 password = hash_string(password)
79 query = 'SELECT * FROM users WHERE login = "{}" and password = "{}"'.format(login, password)
80 db.execute(query)
81 result = db.fetchone()
82 if result is None:
83 return "No such user or password incorrect"
84 resp = redirect('/user')
85 resp.set_cookie('id', str(result[0]))
86 return resp
87
88
89@app.route('/add_note', methods=['POST'])
90def add_note():
91 id = request.cookies.get('id', None)
92 if 'id' is None:
93 return redirect('/')
94 text = request.form.get('note', '')
95 text = text.encode('utf-8', 'replace')
96 if text == '':
97 return "Empty note"
98
99 conn = sqlite3.connect(f)
100 db = conn.cursor()
101 query = 'INSERT INTO notes (text, creator_id) VALUES ("{}",{})'.format(text, id)
102 db.execute(query)
103 conn.commit()
104 return redirect('/user')
105
106
107@app.route('/register', methods=['GET', 'POST'])
108def reg():
109 conn = sqlite3.connect(f)
110 db = conn.cursor()
111 if request.method == 'GET':
112 return render_template('register.html')
113 else:
114 login = request.form.get('login', '')
115 password = request.form.get('password', '')
116
117 if login == '' or password == '':
118 return "Login or password is missing"
119
120 if check_login(login):
121 return "This login already exist"
122
123 password = hash_string(password)
124 query = 'INSERT INTO users (login,password) VALUES ("{}","{}")'.format(login, password)
125 db.execute(query)
126 conn.commit()
127 return "Success"
128
129
130@app.errorhandler(404)
131def page_not_found(e):
132 template = '''
133 <html>
134 <head>
135 <meta charset="UTF-8">
136 <title>404</title>
137 </head>
138 <body>
139 <div class="center-content error">
140 <h1>Oops! That page doesn't exist.</h1>
141 <h3>%s</h3>
142 </div>
143 </body>
144 </html> ''' % (request.url)
145 return render_template_string(template), 404
146
147
148if __name__ == '__main__':
149 conn = sqlite3.connect(f)
150 db = conn.cursor()
151 init_query = 'CREATE TABLE IF NOT EXISTS users(id integer NOT NULL PRIMARY KEY AUTOINCREMENT,login text,password text)'
152 db.execute(init_query)
153 init_query = 'CREATE TABLE IF NOT EXISTS notes(id integer NOT NULL PRIMARY KEY AUTOINCREMENT,text text,creator_id integer)'
154 db.execute(init_query)
155 conn.commit()
156 app.run(host="0.0.0.0", port=5005)