将Python mod_wsgi应用程序与Blueprints一起使用

时间:2015-10-22 04:42:33

标签: python-2.7 flask mod-wsgi

我正在尝试使用以下结构创建简单的mod_wsgi应用程序。

文件:

  1. /var/www/test/application.wsgi - mod_wsgi process
  2. /var/www/test/hello.py - python应用程序
  3. /var/www/test/static/index.html - 静态内容
  4. /etc/apache2/sites-available/test.conf - 应用程序配置
  5. 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错误(即使是空方法体)。任何想法,可能是什么原因?我将不胜感激任何帮助或指示。

1 个答案:

答案 0 :(得分:0)

您应该检查error.log,它始终是开始调试的好地方。我假设会有这样的一行:ImportError: No module named views。这是因为你必须在模块目录中放置(至少一个空的)名为__init__.py的文件(在你的情况下它是views)。以下是Python Doc

的解释
  

需要__init__.py个文件才能让Python对待   目录包含包;这是为了防止   无意中具有通用名称的目录,例如string   隐藏稍后在模块搜索路径上发生的有效模块。在   最简单的情况,__init__.py可以只是一个空文件,但它可以   还执行包的初始化代码或设置__all__   变量,稍后描述。

第二个问题是method=['POST']。应该methodsyou have to add 'GET'方法“正常”到达此页面:

@authentication.route('/facebook/', methods=['GET', 'POST'])
def facebook():
    ''' facebook login'''