-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathserver.py
More file actions
208 lines (148 loc) · 6 KB
/
server.py
File metadata and controls
208 lines (148 loc) · 6 KB
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
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
""" Bark Park server """
from flask import Flask, render_template, redirect, request, session, jsonify
from flask_debugtoolbar import DebugToolbarExtension
from jinja2 import StrictUndefined
from sqlalchemy import update
import simplejson as json
from model import connect_to_db, db, Park, User, Comment, Photo
from creategeojson import create_geojson
from datetime import datetime
app = Flask(__name__)
app.secret_key = "very_very_secret"
app.jinja_env.undefined = StrictUndefined
@app.route('/')
def index():
"""Homepage"""
if 'user' in session:
session_state = True
else:
session_state = False
return render_template("homepage.html", session_state=session_state)
@app.route('/create_map_features.json')
def create_map_features():
"""Creating park features on map"""
#This will give me the data for all the park I want to work with
#Filters using on_leash as this is how I'm keeping bad data out
parks_all_data = Park.query.filter(Park.on_leash==True).order_by(Park.park_name).all()
geojson_objects = []
#This for loop builds the dictionary that will be the base for the geojson
#for map markers.
for park in parks_all_data:
#calls helper function create_geojson() for each park
park_dict = create_geojson(park)
#Appends each dictionary to the geo_json objects list
geojson_objects.append(park_dict)
#Intializes empty dictionary marker
markers = {}
#Creates key: value pair for type: feature collection
markers["type"] = "FeatureCollection"
#creates key value pair for feature: entire geojson_objects
markers["features"] = geojson_objects
return jsonify(markers)
@app.route('/park_info/<park_id>')
def display_park_info(park_id):
"""Renders template dispaying the chosen park"""
park = Park.query.filter(Park.park_id==park_id).one()
return render_template("park_info.html", park=park)
@app.route('/signup_form')
def render_signup():
"""Render signup form template"""
return render_template("signup.html")
@app.route('/add_new_user', methods=["POST"])
def add_new_user():
"""Check for user and add to database"""
user_name = request.form.get("user_name")
email = request.form.get("email")
password = request.form.get("password")
created_at = datetime.now()
new_user = User(user_name=user_name, email=email, password=password, created_at=created_at)
try:
User.query.filter(User.email == email).one()
redirect('/')
except:
db.session.add(new_user)
db.session.commit()
return redirect('/sign_in_form')
@app.route('/sign_in_form')
def render_sign_in_form():
"""Renders sign in form template"""
return render_template('sign_in_form.html')
@app.route('/sign_in', methods=["POST"])
def sign_in():
"""Checks if username/password is correct and logs in"""
email = request.form.get("email")
password = request.form.get("password")
user_id = User.query.filter(User.email == email).one().user_id
user_name = User.query.filter(User.email == email).one().user_name
try:
User.query.filter(User.email == email, User.password == password).one()
session['user'] = user_id
return redirect('/')
except:
print email, password
return "False"
@app.route('/logout')
def logout():
"""User is logged out of session"""
del session['user']
return redirect('/')
@app.route('/enter_info')
def enter_park_info():
"""Form to enter information missing from db"""
return render_template("enter_missing_info.html")
@app.route('/add_new_comment/<park_id>', methods=["POST"])
def add_new_comment(park_id):
"""Adds new comment to db"""
park_id = park_id
user_id = session['user']
content = request.form.get("content")
created_at = datetime.now()
new_comment = Comment(park_id=park_id, user_id=user_id, content=content, created_at=created_at)
db.session.add(new_comment)
db.session.commit()
return redirect('/')
@app.route('/add_new_photo/<park_id>', methods=["POST"])
def add_new_photo(park_id):
"""Adds new photo to db"""
park_id = park_id
user_id = session['user']
created_at = datetime.now()
description = "Having a great time at the park!"
url = request.form.get("photo")
print park_id, url
new_photo = Photo(park_id=park_id, user_id=user_id, created_at=created_at, description=description, url=url)
db.session.add(new_photo)
db.session.commit()
return redirect('/')
@app.route('/enter_info', methods=["POST"])
def update_info_in_db():
"""Updates db from info entered into form."""
park_id = request.form.get("park_id")
latitude = request.form.get("latitude")
longitude = request.form.get("longitude")
# Commented out code below depending on what info I need to add to db.
# on_leash = request.form.get("on_leash")
# off_leash_enclosed = request.form.get("off_leash_enclosed")
# off_leash_unenclosed= request.form.get("off_leash_unenclosed")
# park_url = request.form.get("park_url")
# update_park = """
# UPDATE parks
# SET latitude = :latitude, longitude = :longitude, on_leash = :on_leash, off_leash_enclosed = :off_leash_enclosed, off_leash_unenclosed = :off_leash_unenclosed, park_url = :park_url
# WHERE park_id = :park_id
# """
# To update just lat/long
update_park = """
UPDATE parks
SET latitude = :latitude, longitude = :longitude
WHERE park_id = :park_id
"""
db.session.execute(update_park, {'park_id': park_id, 'latitude': latitude, 'longitude': longitude})
#This is for adding park type filter and url.
# db.session.execute(update_park, {'latitude': latitude, 'longitude':longitude, 'on_leash': on_leash, 'off_leash_enclosed': off_leash_enclosed, 'off_leash_unenclosed': off_leash_unenclosed, 'park_url': park_url})
db.session.commit()
return redirect('/enter_info')
if __name__ == "__main__":
# app.debug = True
connect_to_db(app)
# DebugToolbarExtension(app)
app.run()