-- coding:utf-8 --
from flask import Flask, render_template, render_template_string, request
import tax
from jinja2 import Template
import re
app = Flask(__name__)
flag = 1
@app.route('/cal', methods=['GET'])
def cal_tax() -> 'html':
try: # income = int(request.form['income']) income = int(request.args.get('income', 0)) insurance = int(request.args.get('insurance', 0)) exemption = int(request.args.get('exemption', 0)) # insurance = int(request.form['insurance']) # exemption = int(request.form['exemption']) before = income-insurance-exemption free = 5000 rule = [ (80000, 0.45, 15160), (55000, 0.35, 7160), (35000, 0.3, 4410), (25000, 0.25, 2660), (12000, 0.2, 1410), (3000, 0.1, 210), (0,0.03, 0) ] title = '个税计算结果' mytax = tax.calc_tax(before,free,rule) aftertax_income = income - insurance - mytax return render_template('results.html', the_title=title, the_income=str(income), the_insurance=str(insurance), the_exemption=str(exemption), the_tax=str(mytax), the_aftertax_income=str(aftertax_income))except ValueError: print('------------error-------------\n\n') def safe_jinja(s): # 替换括号 s = s.replace('()', '') s = s.replace('[]', '') blacklist = ['import','os','sys','commands','subprocess','open','eval'] for bl in blacklist: s = s.replace(bl, "") return s title = "输出参数的值有错" # income = request.form['income'] # income = request.form['income'] # insurance = request.form['insurance'] # exemption = request.form['exemption'] income = request.args.get('income', 0) insurance = request.args.get('insurance', 0) exemption = request.args.get('exemption', 0) print(safe_jinja(exemption)) template = ''' <!doctype html> <html> <head> <title>%s</title> <link rel="stylesheet" href="static/hf.css" /> </head> <body> </body> </html> <h2>%s</h2> <table> <p>请查看输出的信息:</p> <tr><td>[PerfectMoney下载](https://www.gendan5.com/wallet/PerfectMoney.html)税前月支出:</td><td>%s</td></tr> <tr><td>四险一金:</td><td>%s</td></tr> <tr><td>专项附加扣除:</td><td>%s</td></tr> </table> ''' % (title, title, safe_jinja(income), safe_jinja(insurance), safe_jinja(exemption)) t = Template(template) return t.render()
@app.route('/')
@app.route('/index')
def entry_page() -> 'html':
return render_template('index.html', the_title='PY个人所得税计算器')
@app.errorhandler(404)
def page_not_found(e) -> 'html':
return render_template('404.html',url=request.url), 404
@app.errorhandler(500)
def server_error(e) -> 'html':
template = '''<title>500 Internal Server Error</title> <h1>Internal Server Error</h1><p>The server encountered an internal error and was unable to complete your request. Please check jinjia2 syntax. Either the server is overloaded or there is an error in the application.</p>'''return render_template_string(template), 500
if name == '__main__':
app.run(debug=False, port = 8003, host="0.0.0.0")