Werkzeug(WSGI应用程序)在同一页面中具有多个HTML表单

时间:2018-07-19 21:16:44

标签: html python-2.7 werkzeug

我在Werkzeug(基于Python)中创建了拳头应用程序。这是一个具有3种形式的简单HTML页面,Werkzeug需要获取此信息并进行处理。我是HTML的新手,也像Werkzeug一样。

我从第一个Werkzeug示例开始,但是我不了解所有情况。 Werkzeug有一个 url_map 。对我来说,这对于Werkzeug确定启动哪个页面和方法很有用。

在下面的示例中,我有 on_layout 方法和 layout.html 页面。仅对于第一种形式,它的效果很好。我可以发布,需要多少信息并由Werkzeug处理(仅适用于.html页面中的第一个表单),但是当我将信息放入第二个表单< / strong>,发生400错误,但是我每次都测试每个表单的内容!

我怀疑我不能很好地处理map和“ on_”方法。我不了解他们之间的关系。在简历中,我需要在html模板之间切换并获取表单信息。

class WSGI(object):
def __init__(self, config):
    self.redis = redis.Redis(config['redis_host'], config['redis_port'])
    template_path = os.path.join(os.path.dirname(__file__), 'templates')
    self.jinja_env = Environment(loader=FileSystemLoader(template_path),
                                 autoescape=True)
    self.url_map = Map([
        Rule('/', endpoint='layout')
        #Rule('/', endpoint='new_account'),

    ])

def render_template(self, template_name, **context):
    t = self.jinja_env.get_template(template_name)
    return Response(t.render(context), mimetype='text/html')

def dispatch_request(self, request):
    adapter = self.url_map.bind_to_environ(request.environ)
    try:
        endpoint, values = adapter.match()
        return getattr(self, 'on_' + endpoint)(request, **values)
    except HTTPException, e:
        return e

def wsgi_app(self, environ, start_response):
    request = Request(environ)
    response = self.dispatch_request(request)
    return response(environ, start_response)

def __call__(self, environ, start_response):
    return self.wsgi_app(environ, start_response)
# #
def on_layout(self, request):
    self.render_template('layout.html')
    error = None
    name = ''
    event = ''
    if request.method == 'POST':
        if request.form['firstname'] != '':
            name = request.form['firstname']
            if name[0].isupper():                   
                transport1 = request.form['transport1'] 
                transport2 = request.form['transport2'] 
                transport3 = request.form['transport3'] 
                hotel = request.form['hotel']
                #return self.render_template('new_account.html')        #400 error happen               
                #self.on_layout(request)                        #infinite loop
        elif request.form['event'] != '':
            user = request.form['user']  
            day = request.form['day']   
            month = request.form['month']
            year = request.form['year']
            hour = request.form['hour']
            event = request.form['event']
    return self.render_template('layout.html')
# #
def create_app(redis_host='localhost', redis_port=6379, with_static=True):
app = WSGI({
    'redis_host':       redis_host,
    'redis_port':       redis_port
})
if with_static:
    app.wsgi_app = SharedDataMiddleware(app.wsgi_app, {
        '/static':  os.path.join(os.path.dirname(__file__), 'static')
    })
return app

谢谢!

0 个答案:

没有答案