2013-03-02 93 views
0

我正在燒瓶中創建Facebook應用程序。由於這是一個微框架,我從教程開始很簡單,並且擁有兩個文件:app.py和conf.py(以及其他類似/ templates)。燒瓶 - 更改項目結構後無法獲取Facebook應用程序ID

在基本結構(由Heroku的主要生成)它是這樣的:

/game 
    game.py 
    conf.py 

app.py

FB_APP_ID = os.environ.get('FACEBOOK_APP_ID') 
FB_APP_SECRET = os.environ.get('FACEBOOK_SECRET') 

requests = requests.session() 
app_url = 'https://graph.facebook.com/{0}'.format(FB_APP_ID) 
FB_APP_NAME = json.loads(requests.get(app_url).content).get('name') 
FB_APP_LOGO = json.loads(requests.get(app_url).content).get('logo_url') 

app = Flask(__name__) 
app.config.from_object(__name__) 
app.config.from_object('conf.Config') 


@app.route('/channel.html', methods=['GET', 'POST']) 
def get_channel(): 
    return render_template('channel.html') 

@app.route('/') 
def index(): 
    return 'index'+str(FB_APP_ID) 

if __name__ == '__main__': 
    port = int(os.environ.get("PORT", 5000)) 
    print requests.headers 
    if app.config.get('FB_APP_ID') and app.config.get('FB_APP_SECRET'): 
     app.run(host='0.0.0.0', port=port) 
    else: 
     print 'Cannot start application without Facebook App Id and Secret set' 

conf.py

import os 

class Config(object): 
    DEBUG = True 
    TESTING = False 
    LOG_LEVEL = os.environ.get('LOG_LEVEL', 'DEBUG') 
    FBAPI_APP_ID = os.environ.get('FACEBOOK_APP_ID') 
    FBAPI_APP_SECRET = os.environ.get('FACEBOOK_SECRET') 
    FBAPI_SCOPE = ['user_likes', 'user_photos', 'user_photo_video_tags'] 

我想拍它完美的MVC,所以我用this link和問題開始。

/game 
    conf.py 
    runserver.py 
    /game 
     /templates 
     /static 
     __init__.py 
     views.py 
     models.py 

runserver.py

import os 
from game import app 

if __name__ == '__main__': 
    port = int(os.environ.get("PORT", 5000)) 
    # print requests.headers 
    if app.config.get('FB_APP_ID') and app.config.get('FB_APP_SECRET'): 
     app.run(host='0.0.0.0', port=port) 
    else: 
     print 'Cannot start application without Facebook App Id and Secret set' 

__init__.py

from flask import Flask 
import os, requests, json 

SCRIPTS='static/scripts/' 


FB_APP_ID = os.environ.get('FACEBOOK_APP_ID') 
FB_APP_SECRET = os.environ.get('FACEBOOK_SECRET') 

requests = requests.session() 
app_url = 'https://graph.facebook.com/{0}'.format(FB_APP_ID) 
FB_APP_NAME = json.loads(requests.get(app_url).content).get('name') 
FB_APP_LOGO = json.loads(requests.get(app_url).content).get('logo_url') 

app = Flask(__name__) 
app.config.from_object(__name__) 
app.config.from_object('conf.Config') 

import game.views 
import game.models 

conf.py保持不變和索引視圖在視圖。

問題:在第一個結構(簡單)os.environ得到所有FB_APP_ID和FB_APP_SECRET就好了,我可以處理任何我想要的數據。

現在(在MVC中)它只是不提取變量,我在那裏有「無」。 我試圖把__init__ == __main__放在任何地方,但沒有任何真正的工作。

conf.py將所有數據放在那裏(如DEBUG = TRUE或LOG LEVEL)。這只是我沒有得到的fb數據。

+0

在兩種情況下'os.environ'的外觀如何? – Blender 2013-03-02 19:36:13

+0

你的意思是它應該返回什麼? – Archarachne 2013-03-02 20:27:41

+0

'打印出來。 – Blender 2013-03-02 20:29:10

回答

2

您需要設置FACEBOOK_APP_ID和FACEBOOK_SECRET在您的環境

說你的虛擬環境被命名爲VENV

創建一個項目根稱爲.venv(文件已requirements.txt,Procfile同一目錄下,的.gitignore等)

附加將此放入該文件並保存:

FACEBOOK_APP_ID=1234... 
FACEBOOK_SECRET=ABCD... 

您FACEBOOK_APP_ID和FACEBOO K_SECRET是通過在developers.facebook.com上找到應用程序的基本設置而找到的.facebook.com