Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file modified flask/orm-tutorial/models-tutorial/app.db
Binary file not shown.
16 changes: 15 additions & 1 deletion flask/orm-tutorial/models-tutorial/app/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,22 @@
from wtforms import StringField, IntegerField
from flask_wtf.html5 import EmailField
from wtforms.validators import DataRequired
from wtforms.ext.sqlalchemy.fields import QuerySelectField

class CustomerForm(Form):
fname = StringField('fname', validators=[DataRequired()])
lname = StringField('lname', validators=[DataRequired()])
company = StringField('company', validators=[DataRequired()])
email = EmailField('email', validators=[DataRequired()])
# Add additional Address fields here
phone = StringField('phone', validators=[DataRequired()])

street_address = StringField('street_address', validators=[DataRequired()])
city = StringField('city', validators=[DataRequired()])
state = StringField('state', validators=[DataRequired()])
country = StringField('country', validators=[DataRequired()])
zip_code = StringField('zip_code', validators=[DataRequired()])

class OrderForm(Form):
totalspent = StringField('totalspent', validators=[DataRequired()])
num_parts_ordered = StringField('num_parts_ordered', validators=[DataRequired()])
customer_id = StringField('customer_id', validators=[DataRequired()])
35 changes: 30 additions & 5 deletions flask/orm-tutorial/models-tutorial/app/models.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,40 @@
from app import db

orders = db.Table('orders',
db.Column('order_id', db.Integer, db.ForeignKey('order.id')),
db.Column('customer_id', db.Integer, db.ForeignKey('customer.id'))
)

class Customer(db.Model):
id = db.Column(db.Integer, primary_key=True)
fname = db.Column(db.String(60), unique=False)
lname = db.Column(db.String(60), unique=False)
company = db.Column(db.String(120), unique=False)
email = db.Column(db.String(120))
# You need to a relationship to Address table here
# see http://flask-sqlalchemy.pocoo.org/2.1/models/#one-to-many-relationships
email = db.Column(db.String(120), unique=False)
phone = db.Column(db.String(20), unique=False)
addresses = db.relationship('Address', backref='customer', cascade='all, delete-orphan', lazy='dynamic')
orders = db.relationship('Order', secondary=orders, backref=db.backref('customer', lazy='dynamic'))

def __repr__(self):
return '<Customer %r>' % self.email
return '<Customer %r>' % self.id

# Your Address code should go here
# class Address(db.Model):
class Address(db.Model):
id = db.Column(db.Integer, primary_key=True)
street_address = db.Column(db.String(120), unique=False)
city = db.Column(db.String(20), unique=False)
state = db.Column(db.String(5), unique=False)
country = db.Column(db.String(60), unique=False)
zip_code = db.Column(db.String(20), unique=False)
customer_id = db.Column(db.Integer, db.ForeignKey('customer.id'))

def __repr__(self):
return '<Address %r>' % self.id

class Order(db.Model):
id = db.Column(db.Integer, primary_key=True)
num_parts_ordered = db.Column(db.String(60), unique=False)
totalspent = db.Column(db.String(60), unique=False)

def __repr__(self):
return '<Address %r>' % self.id
33 changes: 32 additions & 1 deletion flask/orm-tutorial/models-tutorial/app/templates/customer.html
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,14 @@ <h2>Add Customer to Our Database</h2>
{{ form.hidden_tag() }}
<div class="divider"></div>
<div class="section">
<p>
First name:<br>
{{ form.fname(size=60) }}<br>
</p>
<p>
Last name:<br>
{{ form.lname(size=60) }}<br>
</p>
<p>
Company name:<br>
{{ form.company(size=120) }}<br>
Expand All @@ -18,10 +26,33 @@ <h2>Add Customer to Our Database</h2>
Customer email:<br>
{{ form.email(size=120) }}<br>
</p>
<p>
Customer phone:<br>
{{ form.phone(size=20) }}<br>
</p>
</div>
<div class="divider"></div>
<div class="section">
<!-- Additional form fields for the Address should go here -->
<p>
Street Address:<br>
{{ form.street_address(size=120) }}<br>
</p>
<p>
City:<br>
{{ form.city(size=20) }}<br>
</p>
<p>
State:<br>
{{ form.state(size=5) }}<br>
</p>
<p>
Country:<br>
{{ form.country(size=60) }}<br>
</p>
<p>
Zip Code:<br>
{{ form.zip_code(size=20) }}<br>
</p>
</div>
<p><input type="submit" value="Create Customer"></p>
</form>
Expand Down
36 changes: 34 additions & 2 deletions flask/orm-tutorial/models-tutorial/app/templates/home.html
Original file line number Diff line number Diff line change
Expand Up @@ -5,23 +5,55 @@
<h1>Welcome to ACME Aircraft Parts</h1>
<div class= "section">
<a href="{{ url_for('create_customer') }}">Add a Customer</a>
<a href="{{ url_for('create_order') }}">Add an Order</a>
</div>
<div class="divider"></div>
<div class="section">
<h3>These are all of our awesome customers:</h3>
<table class="striped">
<thead>
<tr>
<th data-field="fname">First Name</th>
<th data-field="lname">Last Name</th>
<th data-field="company">Company</th>
<th data-field="email">Email</th>
<th data-field="phone">Phone</th>
<th data-field="city">City</th>
<th data-field="zip_code">Zip Code</th>
</tr>
</thead>
{% for customer in customers %}
<!-- {% for address in customer.addresses %}
{% endfor %} -->
{% for address in customer.addresses.all() %}
<tr>
<td>{{ customer.fname }}</td>
<td>{{ customer.lname }}</td>
<td>{{ customer.company }}</td>
<td>{{ customer.email }}</td>
<td>{{ customer.phone }}</td>
<td>{{ address.city }}</td>
<td>{{ address.zip_code }}</td>
{% endfor %}
</tr>
{% endfor %}
</table>
</div>
<div class="section">
<h3>Orders from Customers:</h3>
<table class="striped">
<thead>
<tr>
<th data-field="num_parts_ordered">Number of Parts</th>
<th data-field="totalspent">Total Spent</th>
<th data-field="customer_id">Customer ID</th>
</tr>
</thead>
{% for order in orders %}
<tr>
<td>{{ order.num_parts_ordered }}</td>
<td>{{ order.totalspent }}</td>
{% for order in order.customer.all() %}
<td>{{ order.id }}</td>
{% endfor %}
</tr>
{% endfor %}
</table>
Expand Down
31 changes: 31 additions & 0 deletions flask/orm-tutorial/models-tutorial/app/templates/order.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
{% extends "base.html" %}
{% block content %}
<div class="container">
<div class="row">
<div class= "section">
<a href="{{ url_for('display_customer') }}">Home</a>
</div>
<h2>Add Order to Our Database</h2>
<form action="" method="post" name="login">
{{ form.hidden_tag() }}
<div class="divider"></div>
<div class="section">
<p>
Number of Parts:<br>
{{ form.num_parts_ordered(size=60) }}<br>
</p>
<p>
Money Spent:<br>
{{ form.totalspent(size=60) }}<br>
</p>
<p>
Customer IDs (seperate by ","):<br>
{{ form.customer_id(size=60) }}<br>
</p>
</div>
<div class="divider"></div>
<p><input type="submit" value="Create Order"></p>
</form>
</div>
</div>
{% endblock %}
47 changes: 38 additions & 9 deletions flask/orm-tutorial/models-tutorial/app/views.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from flask import render_template, redirect, request
from app import app, models, db
from .forms import CustomerForm
from .forms import CustomerForm, OrderForm


@app.route('/')
Expand All @@ -9,19 +9,48 @@ def index():

@app.route('/create_customer', methods=['GET', 'POST'])
def create_customer():
form = CustomerForm()
if form.validate_on_submit():
customerForm = CustomerForm()
if customerForm.validate_on_submit():
customer = models.Customer(
company = form.company.data,
email = form.email.data)
# you will need to add Address here
fname = customerForm.fname.data,
lname = customerForm.lname.data,
company = customerForm.company.data,
email = customerForm.email.data,
phone = customerForm.phone.data)
address = models.Address(
street_address = customerForm.street_address.data,
city = customerForm.city.data,
state = customerForm.state.data,
country = customerForm.country.data,
zip_code = customerForm.zip_code.data,
customer = customer)
db.session.add(customer)
db.session.add(address)
db.session.commit()
return redirect('/customers')
return render_template('customer.html', form=form)
return render_template('customer.html', form=customerForm)

@app.route('/customers')
def display_customer():
customers = models.Customer.query.all()
return render_template('home.html',
customers=customers)
orders = models.Order.query.all()
#orderCustomer = models.orders.query.all()
return render_template('home.html', customers=customers, orders=orders)

@app.route('/create_order', methods=['GET', 'POST'])
def create_order():
orderForm = OrderForm()
if orderForm.validate_on_submit():
order = models.Order(
num_parts_ordered = orderForm.num_parts_ordered.data,
totalspent = orderForm.totalspent.data)

customerids = orderForm.customer_id.data.split(',')

for customer_id in customerids:
customer = models.Customer.query.filter_by(id=customer_id).first()
customer.orders.append(order)
db.session.add(order)
db.session.commit()
return redirect('/customers')
return render_template('order.html', form=orderForm)