Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flask和nginx路由_Nginx_Routing_Flask_Uwsgi - Fatal编程技术网

Flask和nginx路由

Flask和nginx路由,nginx,routing,flask,uwsgi,Nginx,Routing,Flask,Uwsgi,我已经配置了nginx+uwsgi+flask,现在我正在努力为我的flask定义的路由预先设置路径。基本问题是:这有可能吗 假设我有一个路由app.route('/login'),我想将nginx配置为从地址/api/login访问此路由 我当前的配置看起来像这样,但不起作用 location = /api { rewrite ^ /api/; } location /api { try_files $uri @api; } location @api { include

我已经配置了nginx+uwsgi+flask,现在我正在努力为我的flask定义的路由预先设置路径。基本问题是:这有可能吗

假设我有一个路由
app.route('/login')
,我想将nginx配置为从地址
/api/login
访问此路由

我当前的配置看起来像这样,但不起作用

location = /api { rewrite ^ /api/; }
location /api { try_files $uri @api; }
location @api {
        include            uwsgi_params;
        uwsgi_pass         uwsgicluster;

    proxy_redirect     off;
    proxy_set_header   Host $host;
    proxy_set_header   X-Real-IP $remote_addr;
    proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header   X-Forwarded-Host $server_name;
}

感谢您的帮助。

一个建议是在应用程序中保留路由逻辑:

app.route('/api/login')
或者实现url_前缀为“/api”的“api”蓝图:

文件:api/views.py

from flask import Blueprint, render_template, abort
from jinja2 import TemplateNotFound

api = Blueprint('api', __name__, url_prefix='/api')

@api.route('/', defaults={'page': 'index'})
@api.route('/<page>')
def show(page):
    if page == 'login':
        # do something
    try:
        return render_template('pages/%s.html' % page)
    except TemplateNotFound:
        abort(404)

为什么不在应用程序中保留路由逻辑?app.route('/api/login')我一直在寻找比到处写'/api'重复性更少的解决方案。谢谢你的蓝图想法!
from flask import Flask
from .api import api

app = Flask(__name__)
app.register_blueprint(api)