2017-05-04 69 views
0

我正在爲一個類編寫一個虛擬網站,並且在將我的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 
) 

回答

1

您必須首先在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