Added final coffee and wifi project
This commit is contained in:
parent
a351576000
commit
88aed5bbb7
@ -0,0 +1,6 @@
|
|||||||
|
Cafe Name,Location,Open,Close,Coffee,Wifi,Power
|
||||||
|
Lighthaus,https://goo.gl/maps/2EvhB4oq4gyUXKXx9,11AM, 3:30PM,☕☕☕☕️,💪💪,🔌🔌🔌
|
||||||
|
Esters,https://goo.gl/maps/13Tjc36HuPWLELaSA,8AM,3PM,☕☕☕☕,💪💪💪,🔌
|
||||||
|
Ginger & White,https://goo.gl/maps/DqMx2g5LiAqv3pJQ9,7:30AM,5:30PM,☕☕☕,✘,🔌
|
||||||
|
Mare Street Market,https://goo.gl/maps/ALR8iBiNN6tVfuAA8,8AM,1PM,☕☕,💪💪💪,🔌🔌🔌
|
||||||
|
Test,https://hyper.is/,29pm,48am,☕☕☕,💪💪💪💪💪,🔌🔌🔌🔌🔌
|
||||||
|
@ -0,0 +1,69 @@
|
|||||||
|
from flask import Flask, render_template, redirect, url_for
|
||||||
|
from flask_bootstrap import Bootstrap5
|
||||||
|
from flask_wtf import FlaskForm
|
||||||
|
from wtforms import StringField, SubmitField, SelectField
|
||||||
|
from wtforms.validators import DataRequired, URL
|
||||||
|
import csv
|
||||||
|
|
||||||
|
'''
|
||||||
|
Red underlines? Install the required packages first:
|
||||||
|
Open the Terminal in PyCharm (bottom left).
|
||||||
|
|
||||||
|
On Windows type:
|
||||||
|
python -m pip install -r requirements.txt
|
||||||
|
|
||||||
|
On MacOS type:
|
||||||
|
pip3 install -r requirements.txt
|
||||||
|
|
||||||
|
This will install the packages from requirements.txt for this project.
|
||||||
|
'''
|
||||||
|
|
||||||
|
app = Flask(__name__)
|
||||||
|
app.config['SECRET_KEY'] = '8BYkEfBA6O6donzWlSihBXox7C0sKR6b'
|
||||||
|
Bootstrap5(app)
|
||||||
|
|
||||||
|
|
||||||
|
class CafeForm(FlaskForm):
|
||||||
|
cafe = StringField('Cafe name', validators=[DataRequired()])
|
||||||
|
location = StringField("Cafe Location on Google Maps (URL)", validators=[DataRequired(), URL()])
|
||||||
|
open = StringField("Opening Time e.g. 8AM", validators=[DataRequired()])
|
||||||
|
close = StringField("Closing Time e.g. 5:30PM", validators=[DataRequired()])
|
||||||
|
coffee_rating = SelectField("Coffee Rating", choices=["☕️", "☕☕", "☕☕☕", "☕☕☕☕", "☕☕☕☕☕"], validators=[DataRequired()])
|
||||||
|
wifi_rating = SelectField("Wifi Strength Rating", choices=["✘", "💪", "💪💪", "💪💪💪", "💪💪💪💪", "💪💪💪💪💪"], validators=[DataRequired()])
|
||||||
|
power_rating = SelectField("Power Socket Availability", choices=["✘", "🔌", "🔌🔌", "🔌🔌🔌", "🔌🔌🔌🔌", "🔌🔌🔌🔌🔌"], validators=[DataRequired()])
|
||||||
|
submit = SubmitField('Submit')
|
||||||
|
|
||||||
|
|
||||||
|
@app.route("/")
|
||||||
|
def home():
|
||||||
|
return render_template("index.html")
|
||||||
|
|
||||||
|
|
||||||
|
@app.route('/add', methods=["GET", "POST"])
|
||||||
|
def add_cafe():
|
||||||
|
form = CafeForm()
|
||||||
|
if form.validate_on_submit():
|
||||||
|
with open("cafe-data.csv", mode="a", encoding='utf-8') as csv_file:
|
||||||
|
csv_file.write(f"\n{form.cafe.data},"
|
||||||
|
f"{form.location.data},"
|
||||||
|
f"{form.open.data},"
|
||||||
|
f"{form.close.data},"
|
||||||
|
f"{form.coffee_rating.data},"
|
||||||
|
f"{form.wifi_rating.data},"
|
||||||
|
f"{form.power_rating.data}")
|
||||||
|
return redirect(url_for('cafes'))
|
||||||
|
return render_template('add.html', form=form)
|
||||||
|
|
||||||
|
|
||||||
|
@app.route('/cafes')
|
||||||
|
def cafes():
|
||||||
|
with open('cafe-data.csv', newline='', encoding='utf-8') as csv_file:
|
||||||
|
csv_data = csv.reader(csv_file, delimiter=',')
|
||||||
|
list_of_rows = []
|
||||||
|
for row in csv_data:
|
||||||
|
list_of_rows.append(row)
|
||||||
|
return render_template('cafes.html', cafes=list_of_rows)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
app.run(debug=True, port=5002)
|
||||||
@ -0,0 +1,5 @@
|
|||||||
|
Bootstrap_Flask==2.2.0
|
||||||
|
Flask==2.3.2
|
||||||
|
WTForms==3.0.1
|
||||||
|
Flask_WTF==1.2.1
|
||||||
|
Werkzeug=3.0.0
|
||||||
@ -0,0 +1,24 @@
|
|||||||
|
/* to override Bootstrap styles for some things */
|
||||||
|
|
||||||
|
body {
|
||||||
|
background-color: #333;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: #ffc107;
|
||||||
|
}
|
||||||
|
|
||||||
|
.jumbotron {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
margin: 0;
|
||||||
|
height: 100vh;
|
||||||
|
color: white;
|
||||||
|
background-color: #333;
|
||||||
|
}
|
||||||
|
|
||||||
|
.space-above {
|
||||||
|
margin-top: 20px;
|
||||||
|
padding-top: 20px;
|
||||||
|
}
|
||||||
@ -0,0 +1,20 @@
|
|||||||
|
{% extends 'base.html' %}
|
||||||
|
{% from 'bootstrap5/form.html' import render_form %}
|
||||||
|
|
||||||
|
{% block title %}Add A New Cafe{% endblock %}
|
||||||
|
{% block content %}
|
||||||
|
<div class="container">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-sm-12 col-md-8">
|
||||||
|
<h1>Add a new cafe into the database</h1>
|
||||||
|
|
||||||
|
{{ render_form(form, novalidate=True) }}
|
||||||
|
|
||||||
|
<p class="space-above">
|
||||||
|
<a href="{{ url_for('cafes') }}">See all cafes</a>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% endblock %}
|
||||||
@ -0,0 +1,25 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<meta
|
||||||
|
name="viewport"
|
||||||
|
content="width=device-width, initial-scale=1, shrink-to-fit=no"
|
||||||
|
/>
|
||||||
|
|
||||||
|
{% block styles %}
|
||||||
|
<!-- Load Bootstrap-Flask CSS here -->
|
||||||
|
{{ bootstrap.load_css() }}
|
||||||
|
<!-- Link to the styles.css here to apply styling to all the child templates.-->
|
||||||
|
<link
|
||||||
|
rel="stylesheet"
|
||||||
|
href="{{ url_for('static', filename='css/styles.css') }}"
|
||||||
|
/>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
<title>{% block title %}{% endblock %}</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
{% block content %}{% endblock %}
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@ -0,0 +1,26 @@
|
|||||||
|
{% extends 'base.html' %}
|
||||||
|
{% block title %}All Cafes{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div class="container">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-sm-12">
|
||||||
|
<h1>All Cafes</h1>
|
||||||
|
|
||||||
|
<table class="table" style="color: white">
|
||||||
|
{% for row in cafes %}
|
||||||
|
<tr>
|
||||||
|
{% for item in row %} {% if item[0:4] == "http" %}
|
||||||
|
<td><a href="{{ item }}">Maps Link</a></td>
|
||||||
|
{% else %}
|
||||||
|
<td>{{ item }}</td>
|
||||||
|
{% endif %} {% endfor %}
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</table>
|
||||||
|
<p><a href="{{ url_for('home') }}">Return to index page</a></p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% endblock %}
|
||||||
@ -0,0 +1,23 @@
|
|||||||
|
{% extends 'base.html' %}
|
||||||
|
{% block title %}Coffee and Wifi{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div class="jumbotron text-center">
|
||||||
|
<div class="container">
|
||||||
|
<h1 class="display-4">☕️ Coffee & Wifi 💻</h1>
|
||||||
|
<p class="lead">Want to work in a cafe but need power and wifi?</p>
|
||||||
|
<hr class="my-4" />
|
||||||
|
<p>
|
||||||
|
You've found the right place! Checkout my collection of cafes with data on
|
||||||
|
power socket availability, wifi speed and coffee quality.
|
||||||
|
</p>
|
||||||
|
<a
|
||||||
|
class="btn btn-warning btn-lg"
|
||||||
|
href="{{ url_for('cafes') }}"
|
||||||
|
role="button"
|
||||||
|
>Show Me!</a
|
||||||
|
>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% endblock %}
|
||||||
Loading…
Reference in New Issue
Block a user