我在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
谢谢!