DEV Community

How to Deploy a Flask app on Heroku.

Trilochan Parida on July 04, 2020

Hello Friends, In this article I will show you how to deploy a flask app on Heroku. Follow the below steps to deploy your python flask app on H...
Collapse
 
jnshrink profile image
Jon Nordland

Thank you, Very good. More people should focus on succinct explanations like this.

Collapse
 
techparida profile image
Trilochan Parida

I am glad you like it :)

Collapse
 
kirtan0000 profile image
Kirtan Magan

Thanks omg you are thebest =ever!!!!1!!!!

Collapse
 
thms profile image
Thomas Rettig

OMG!!! THANK YOU SO MUCH!!! I was spending the past few days struggling to deploy my Flask app to Heroku, and then I stumbled across your article. After a few modifications, the site is now in production! :D

Collapse
 
coderoftheworld profile image
The Phantom Coder

Thanks, this was quick and easy and it worked perfectly for me.

Collapse
 
lawrenebrown profile image
Edung Divinefavour

Super useful!!!!!!!!!

Collapse
 
luv2bnanook44 profile image
Luv2bnanook44

thank you!!!

Collapse
 
pljay profile image
Pathum Lakshan

Neat work Thanks lot

Collapse
 
billyndirangu profile image
billy_dev

I like the tutorial, Thank you.
My question is how do is set a port and a database that isn't a local storage on like: sqlite, to using postgresql?

Collapse
 
pythondeveloper360 profile image
Hanzala Khan

Hey I have a simple endpoint on my Herokuapp bloggir.herokuapp.com/d and i want to fetch it with JS fetch API, it is giving an error.please help

Collapse
 
mohsinashraf profile image
Mohsin Ashraf

Thanks great tutorial.

Collapse
 
zeybep profile image
zeybep

Hi,
Firstly thank you very much ... I have to python files and they are in the same folder, named app folder... one is main.py and the other is sendemail1.py and there is wsgi.py file under the virtual directory. But when i run the wsgi.py it gives me the ModuleNotFoundError: No module named 'sendemail1' error so i can not push to heroku...


my wsgi.py is;

from app.main import app

if name == "main":
app.run()


main.py file is:

from flask import Flask, render_template, request
from flask_sqlalchemy import SQLAlchemy
from sendemail1 import sendemail

from sqlalchemy.sql import func
...
app= Flask(name)
app.config['SQLALCHEMY_DATABASE_URI']='postgresql://postgres:123456@localhost/height_collector'

class Data(db.Model):
tablename="data"
id=db.Column(db.Integer,primary_key=True)
email_=db.Column(db.String(120),unique=True)
height_=db.Column(db.Integer)

def __init__(self,email_,height_):
    self.email_=email_
    self.height_=height_
Enter fullscreen mode Exit fullscreen mode

@app.route("/")
def index():
return render_template("index.html")

@app.route("/success",methods=['POST'])
def success():
if request.method=='POST':
email=request.form["email_name"]
height=request.form["height_name"]

    print(email)
    if  db.session.query(Data).filter(Data.email_ == email).count() == 0:
        data=Data(email,height)
        db.session.add(data)
        db.session.commit()
        #average calculate

        avg_height=db.session.query(func.avg(Data.height_)).scalar()
        avg_height=round(avg_height,1)
        print(avg_height)
        count = db.session.query(Data.height_).count()
        sendemail(email,height,avg_height,count)

        return render_template("success.html")

return render_template("index.html",
text="Seems like there is an email already :)")
Enter fullscreen mode Exit fullscreen mode

if name=='main':
app.debug=True
app.run()


sendemail1.py file is

from email.mime.text import MIMEText
import smtplib

def sendemail(email,height,avg_height,count):
from_email="usertestblabla@gmail.com"
from_password="eee134566"
to_email=email

subject="Height Data"
message ="Hey , your height is <strong> %s. <strong> Average height of all is %s and calculated out <strong> %s <strong> of people. " % (height, avg_height,count)

msg = MIMEText(message,'html')
msg['Subject']=subject
msg['To']=to_email
msg['From']=from_email

gmail=smtplib.SMTP('smtp.gmail.com',587)
gmail.ehlo()
gmail.starttls()
gmail.login(from_email,from_password)
gmail.send_message(msg)
Enter fullscreen mode Exit fullscreen mode

thank you very much

Collapse
 
zeybep profile image
zeybep

Hi again,
i found the error...It is because i have to write the import like this
from app.sendemail1 import sendemail to the main.py
than it works
have a great day

Collapse
 
davidkiama profile image
davidkiama

Thanks mate!

Collapse
 
saragarcia1310 profile image
Sara García

Thank you so much!! Very well explained

Collapse
 
masterd98 profile image
Dasith Rathnasinghe

Thank you. very useful