我正在尝试使用以下结构创建简单的mod_wsgi应用程序。
文件:
application.wsgi
import sys
activate_this = '/home/ubuntu/environments/test/bin/activate_this.py'
execfile(activate_this, dict(__file__=activate_this))
sys.path.insert(0, '/var/www/test')
from hello import app as application
hello.py
from flask import Flask
app = Flask(__name__, static_url_path='')
@app.route("/")
def root():
return app.send_static_file('index.html')
的index.html
<html><h1>testing</h1></html>
test.conf
<VirtualHost *:80>
ServerName localhost
WSGIDaemonProcess hello user=ubuntu group=ubuntu threads=5
WSGIScriptAlias / /var/www/test/application.wsgi
WSGIScriptReloading On
<Directory /var/www/test>
WSGIProcessGroup hello
WSGIApplicationGroup %{GLOBAL}
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
Allow from all
Require all granted
</Directory>
ErrorLog /var/log/test/error.log
LogLevel warn
CustomLog /var/log/test/access.log combined
ServerSignature Off
</VirtualHost>
上述应用程序运行良好,它显示index.html的静态内容。
一旦我介绍蓝图,应用程序就会停止工作
现在,修改后的文件如下:
hello.py
from flask import Flask
app = Flask(__name__, static_url_path='')
@app.route("/")
def root():
return app.send_static_file('index.html')
from views.authentication import authentication
app.register_blueprint(authentication, url_prefix='/test/auth')
/var/www/test/views/authentication.py - facebook身份验证
from flask import Blueprint
authentication = Blueprint('authentication', __name__)
@authentication.route('/facebook/', method=['POST'])
def facebook():
''' facebook login '''
access_token_url = app.config.get('FACEBOOK_ACCESS_TOKEN_URL')
graph_api_url = app.config.get('FACEBOOK_GRAPH_API_URL')
pass
一旦我介绍上面的Blueprint代码,我就开始收到404错误(即使是空方法体)。任何想法,可能是什么原因?我将不胜感激任何帮助或指示。
答案 0 :(得分:0)
您应该检查error.log
,它始终是开始调试的好地方。我假设会有这样的一行:ImportError: No module named views
。这是因为你必须在模块目录中放置(至少一个空的)名为__init__.py
的文件(在你的情况下它是views
)。以下是Python Doc:
需要
__init__.py
个文件才能让Python对待 目录包含包;这是为了防止 无意中具有通用名称的目录,例如string 隐藏稍后在模块搜索路径上发生的有效模块。在 最简单的情况,__init__.py
可以只是一个空文件,但它可以 还执行包的初始化代码或设置__all__
变量,稍后描述。
第二个问题是method=['POST']
。应该methods
和you have to add 'GET'
方法“正常”到达此页面:
@authentication.route('/facebook/', methods=['GET', 'POST'])
def facebook():
''' facebook login'''