/
server.py
167 lines (125 loc) · 4.51 KB
/
server.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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
from flask import Flask, render_template, flash, redirect, request, session, jsonify
from flask_debugtoolbar import DebugToolbarExtension
from model import connect_to_db, User, Pattern, UserLikesPattern, db
from forms import RegistrationForm, LoginForm
from server_helper_functions import *
import os
app = Flask(__name__)
app.secret_key = os.environ['FLASK_KEY']
connect_to_db(app, 'knitpreviewproject')
@app.route('/')
def show_homepage():
latest = get_newest()
most_liked = get_most_liked()
return render_template('home.html', latest=latest, most_liked=most_liked)
@app.route('/register')
def show_registration_form():
form = RegistrationForm(request.form)
return render_template('register.html', form=form)
@app.route('/register', methods=['POST'])
def register_user():
""" Adds new user to the DB and logs them in"""
form = RegistrationForm(request.form)
if form.validate():
user_id = register_new_user(form.email.data.lower(), form.password.data)
session['user_id'] = user_id
flash('Registered Successfully')
return jsonify(data=form.errors)
@app.route('/login')
def show_login_page():
form = LoginForm(request.form)
return render_template('login.html', form=form)
@app.route('/login', methods=['POST'])
def login_user():
""" Logs in user """
form = LoginForm(request.form)
if form.validate():
user = User.query.filter_by(email=form.email.data).first()
session['user_id'] = user.user_id
flash('Logged In Successfully')
return jsonify(data=form.errors)
@app.route('/logout')
def logout_user():
del session['user_id']
flash('Successfully logged out')
return redirect('/')
@app.route('/user')
def show_current_user_page():
""" Shows the user page only if logged in"""
user_id = session.get('user_id')
if user_id:
return render_template('user.html',user=User.query.get(user_id))
else:
return redirect('/login')
# @app.route('/settings')
# def show_settings_page():
# """"""
# @app.route('/users')
# def show_list_of_users():
# """"""
# @app.route('/users/<user_id>')
# def show_user_id_page():
# """"""
@app.route('/patterns')
def show_all_patterns():
""" shows the results of seach '' """
return render_template('patterns.html')
@app.route('/patterns/search')
def show_search_form():
""" Patterns search page"""
return render_template('patterns_search.html')
@app.route('/patterns/search/results.json')
def get_search_results():
"""Sends search results back for AJAX"""
search_val = request.args.get('searchVal')
page = int(request.args.get('page', 1,))
return make_search_json(search_val, page, 10)
@app.route('/patterns/new')
def create_pattern():
""" Shows page to create new pattern only if logged in"""
user_id = session.get('user_id')
if user_id:
return render_template('patterns_new.html')
else:
return redirect('/login')
@app.route('/patterns/<pattern_id>')
def show_pattern(pattern_id):
""" Based on user log status, shows like button on pattern page. """
user_id = session.get('user_id')
pattern= Pattern.query.get(pattern_id)
if not user_id:
to_like = 'logged out'
elif pattern.user_id == user_id:
to_like = 'created'
elif UserLikesPattern.query.filter_by(user_id=user_id, pattern_id=pattern_id).first():
to_like = 'liked'
else:
to_like = 'like'
return render_template('pattern.html', pattern=pattern, to_like=to_like)
@app.route('/patterns/<pattern_id>', methods=['POST'])
def like_or_unlike_pattern(pattern_id):
""" Toggles on or off user like of pattern"""
pattern = Pattern.query.get(pattern_id)
user = User.query.get(session['user_id'])
if pattern in user.likes:
unlike_pattern(user.user_id, pattern_id)
return 'like'
if pattern in user.created_patterns:
return 'created'
else:
like_pattern(user.user_id, pattern_id)
return 'liked'
@app.route('/save', methods=['POST'])
def save_pattern():
""" Saves the pattern to the DB, creates a saved SVG text file."""
svg_string = request.form.get('svgString')
pattern_text = request.form.get('patternText')
pattern_name = request.form.get('name')
user_id = session.get('user_id')
pattern = save_new_pattern(user_id, pattern_text, pattern_name, svg_string)
return str(pattern.pattern_id)
if __name__ == '__main__':
app.debug = False
# Use the DebugToolbar
# DebugToolbarExtension(app)
app.run(host="0.0.0.0")