带有烧瓶和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

+0

谢谢你的回复。我已经做到了。我只是无法弄清楚什么代码是将数据库链接到我的应用程序 –

+0

您是否尝试过'url = urlparse.urlparse(os.environ [“DATABASE_URL”])''。这应该从heroku环境变量中获取数据库URL。 – yovsky