Flask - 更改项目结构后无法获取Facebook APP ID

时间:2013-03-02 19:31:45

标签: python facebook flask

我正在Flask中创建一个Facebook应用程序。由于这是一个微框架,我从教程开始很简单,并且包含2个文件中的所有内容:app.py和conf.py(以及其他类似/ templates)。

在基本结构中(主要由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'

__初始化__。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数据。

1 个答案:

答案 0 :(得分:2)

您需要在您的环境中设置FACEBOOK_APP_ID和FACEBOOK_SECRET

假设您的虚拟环境名为venv

在项目根目录中创建名为.venv的文件(具有requirements.txt,Procfile,.gitignore等的目录)

将其添加到文件中并保存:

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

通过在developers.facebook.com上转到应用的基本设置,可以找到您的FACEBOOK_APP_ID和FACEBOOK_SECRET