0

Flask で Facebook アプリを作成しています。これはマイクロフレームワークであるため、チュートリアルから簡単に始めて、app.py と conf.py (および /templates など) の 2 つのファイルにすべてを含めました。

基本的な構造(主に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にしたかったので、このリンクを使用して問題が発生しました。

/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 は同じままで、index ビューはビューにあります。

問題: 最初の構造 (単純な) で、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 に答える