Python Flask URL Logic,用于2种不同的脚本和不同的视图

时间:2013-09-21 04:09:41

标签: python url nginx flask flask-extensions

我是新手(使用nginx),我正在尝试理解URL逻辑。我有2个python脚本.... / site / myapp.py和/site/bar.py。

我有三个问题,请:

  1. 如果,我只想运行myapp.py而不是/site/bar.py我该如何添加 使用add_url_rule运行它的网址规则?
  2. 如果我想跑步,我该如何做同样的事情     /site/bar.py而不是?
  3. 如果我想运行myapp.py,并且有两个     不同的观点......取决于xml.open("POST", "/site/myapp/view1", true)xml.open("POST", "/site/myapp/view2",是真的)....我将如何为每个分配一个网址     使用add_url_rule在myapp.py中查看?
  4. python脚本/site/myapp.py:

    root@chat:/site# cat myapp.py
    import flask, flask.views
    app = flask.Flask(__name__)
    
    class View1(flask.views.MethodView):
        def post(self):
        pass
    
    app.add_url_rule('/site/myapp', view_func=View1.as_view('view1'))
    
    root@chat:/site# 
    

    Javascript功能:

    function foo() {
            var xml = new XMLHttpRequest();
            xml.open("POST", "/site/myapp", true);
            xml.send(form);
            console.log("sent")
            xml.onreadystatechange = function () {
                console.log(xml.readyState);
                console.log(xml.status);
                if (xml.readyState == "4" && xml.status == "200"){
                    console.log("yes");
                    console.log(xml.responseText);
                }
            }
        }
    

    nginx config:

    server {
        listen 10.33.113.55;
    
        access_log /var/log/nginx/localhost.access_log main;
        error_log /var/log/nginx/localhost.error_log info;
    
    location / {
    root /var/www/dude;
    }
    
    location /site/ {
           try_files $uri @uwsgi;
    }
    
    location @uwsgi {
                include uwsgi_params;
                uwsgi_pass 127.0.0.1:3031;
        }
    
    }
    

1 个答案:

答案 0 :(得分:2)

flask tutorial上,您可以找到以下内容:

@app.route('/')
def show_entries():
    cur = g.db.execute('select title, text from entries order by id desc')
    entries = [dict(title=row[0], text=row[1]) for row in cur.fetchall()]
    return render_template('show_entries.html', entries=entries)

这意味着,在http://yourdomain.tld/访问您网站的任何人都将执行show_entries功能,并且render_template('show_entries.html', entries=entries)的返回值将发送给用户。

this page上,您还可以找到:

@app.route('/')
def index():
    pass

相当于

def index():
    pass
app.add_url_rule('/', 'index', index)

你需要忘记你的PHP背景,并以另一种方式思考。人们不会使用http://yourdomain.com/index.py等网址访问您的网站。基本上,您告诉您的服务器瓶子负责处理URL,并将URL映射到函数。就这么简单。