I am trying to use decorator for verifying user in bottle web framework for python. following is my login decorator code def decorate_verify_user(fun): def nothing(): logging.debug("no username password available") return template("failed_login.html",post_data="No post_data") @wraps(fun) def do_it(): if(verify_user()==True): fun() else: nothing() logging.debug("function name of do_it is {}".format(do_it.__name__)) return do_it following function uses decorator @route('/view_antigen', method='POST') @decorate_verify_user def view_antigen(): logging.debug('view_antigen() entered...') m=mysql_lis() con=m.get_link(astm_var.my_host,astm_var.my_user,astm_var.my_pass,astm_var.my_db) cur=m.run_query(con,prepared_sql='select * from antigen',data_tpl=()) all_data=m.get_all_rows(cur) logging.debug("antigen data:{}".format(all_data)) if(all_data==None): logging.debug('antigen data not found') m.close_cursor(cur) m.close_link(con) return False m.close_cursor(cur) m.close_link(con) logging.debug('view_antigen.html entering...') return template("view_antigen.html",all_data=all_data) if I remove @decorate_verify_user line, template shows as expected But, with @decorate_verify_user line, only blank page is shown. (However, browser web developer tool shows all POST variables correctly. Log file also shows all statements upto line logging.debug('view_antigen.html entering...') What is explanation/correction of this behavior? Continue reading...