我正在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数据。
答案 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