【发布时间】:2013-09-26 11:01:04
【问题描述】:
我正在 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
运行服务器.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数据。
【问题讨论】:
-
os.environ在这两种情况下是什么样子的? -
你的意思是它应该返回什么?
-
简单:speedy.sh/yZZux/simple-environ MVC:speedy.sh/B55Qz/mvc-environ 我已经注意到在 MVC 中没有 Facebook 变量。我真的不知道为什么。我用来模拟 Facebook env 的是使用工头在本地运行应用程序。 FB 上的应用配置为使用127.0.0.1:5000。