0

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

在基本结构中(主要由 heroku 生成)是这样的:

/game
     game.py
     conf.py

应用程序.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'

配置文件

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,所以我使用了这个链接,问题就开始了。

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

运行服务器.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数据。

4

1 回答 1

2

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

假设您的虚拟环境名为 venv

在项目根目录中创建一个名为 .venv 的文件(与 requirements.txt、Procfile、.gitignore 等相同的目录)

添加将其放入文件并保存:

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

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

于 2013-09-26T03:01:04.947 回答