带有烧瓶和Python的Heroku Postgres数据库
问题描述:
我正在为一个类编写一个虚拟网站,并且在将我的Heroku数据库连接到我的应用程序时遇到问题,直到我推到Heroku。带有烧瓶和Python的Heroku Postgres数据库
我不确定这样做的正确方法,并且我搜索了很多视频/论坛,我似乎无法从他们那里得到直接答案。我发布了一些我的代码如下。在dbconnect.py中插入heroku数据库凭证,如URI,主机等?
#app.py
from flask import Flask, render_template, redirect, url_for, request, session, flash
from functools import wraps
app = Flask(__name__)
app.secret_key = "Gundam"
# login required decorator
def login_required(f):
@wraps(f)
def wrap(*args, **kwargs):
if 'logged_in' in session:
return f(*args, **kwargs)
else:
flash('You need to login first.')
return redirect(url_for('login_page'))
return wrap
@app.route('/')
def homepage():
return render_template("main.html")
@app.route('/dashboard/')
@login_required
def dashboard():
return render_template("dashboard.html")
@app.errorhandler(404)
def page_not_found(e):
return render_template("404.html")
@app.route('/login/', methods=["GET", "POST"])
def login_page():
error = ''
try:
if request.method == "POST":
attempted_username = request.form['username']
attempted_password = request.form['password']
if attempted_username == "admin" and attempted_password == "password":
session['logged_in'] = True
flash('You were just logged in!')
return redirect(url_for('dashboard'))
else:
error = "Invalid Username or Password."
return render_template("login.html", error=error)
except Exception as e:
return render_template("login.html", error=error)
@app.route('/logout/')
def logout():
session.pop("logged_in", None)
return redirect(url_for('homepage'))
if __name__ == '__main__':
app.run(debug = True)
dbconnect.py
import os
import psycopg2
import urlparse
urlparse.uses_netloc.append("postgres")
url = urlparse.urlparse(os.environ[""])
conn = psycopg2.connect(
database=url.path[1:],
user=url.username,
password=url.password,
host=url.hostname,
port=url.port
)
答
您必须首先在heroku中安装postgres数据库插件。在计算机上运行heroku工具栏并输入命令heroku addons:create heroku-postgresql:hobby-dev
。 Hobby-dev是免费版本。
一旦添加了Heroku Postgres,DATABASE_URL
设置将在应用程序配置中可用,并将包含用于访问新配置的Heroku Postgres服务的URL。使用该值作为数据库的URI。应用配置可以从仪表板访问。在设置下,点击Reveal config vars
。您也可以使用toolbelt命令。见heroku config -h
。
所以现在你可以这样做:
url = urlparse.urlparse(os.environ["DATABASE_URL"])
欲了解更多详情,请参阅https://devcenter.heroku.com/articles/heroku-postgresql
谢谢你的回复。我已经做到了。我只是无法弄清楚什么代码是将数据库链接到我的应用程序 –
您是否尝试过'url = urlparse.urlparse(os.environ [“DATABASE_URL”])''。这应该从heroku环境变量中获取数据库URL。 – yovsky