关于python:BMZCTF个人所得税

56次阅读

共计 2499 个字符,预计需要花费 7 分钟才能阅读完成。

– 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")

正文完
 0