很久之前用tkinter写过一些GUI工具,比如调百度翻译接口的翻译器、爬虫音乐、图片等等的一些小工具等
然后上个周末时又用tkinter写了一个界面工具:自动生成一些测试数据,如下:
点击不同按钮,生成对应的数据
但是这种GUI工具不太好分享给其他人使用(要么把代码给别人,要么转成exe程序,2种方法都比较麻烦)
刚好这段时间看了flask,所以就产生了一个想法:使用flask把这个功能做成web页面
OK,下面来看整个实现过程。注意,本文不讲基础的flask配置,直接从具体实现入手~
一、编写生成测试数据的后台处理逻辑
首先创建一个flask项目,然后在app.py中编写视图函数以及构造测试数据的逻辑代码(主要利用faker库来生成诸如手机号码、身份证id、人名等数据)
1、首先创建一个视图函数,作为程序访问入口
@app.route('/index') def index(): return render_template("base.html")
base.html 是我在templates目录下创建的模板(先放在这里,等下再编写对应的html代码)
2、编写生成电话号码的逻辑代码
def create_phone(): """生成电话""" phones = [fake.phone_number() for _ in range(5)] # 列表推导,把生成的数据组成一个列表 return " ".join(phones) @app.route('/phone', methods=['GET']) def phone(): data = create_phone() return data
create_phone() 函数实现生成电话号码的处理逻辑;
视图函数 phone() 则调用 create_phone() 函数 把生成的测试数据返回出去,当用户访问这个url(xxx/phone)时则会触发 phone() 函数
按照上述方式依次编写好生成身份证id、人名的逻辑代码,完整的app.py如下
1 from flask import Flask, render_template 2 import random 3 import faker 4 import emoji 5 6 app = Flask(__name__) 7 fake = faker.Faker(locale='zh_CN') # 初始化,指定生成中文格式数据 8 9 10 @app.route('/index') 11 def index(): 12 return render_template("base.html") 13 14 15 def create_phone(): 16 """生成电话""" 17 phones = [fake.phone_number() for _ in range(5)] # 列表推导,把生成的数据组成一个列表 18 return " ".join(phones) 19 20 21 @app.route('/phone', methods=['GET']) 22 def phone(): 23 data = create_phone() 24 return data 25 26 27 def create_id(): 28 """生成身份证""" 29 identity_ids = [fake.ssn() for i in range(5)] 30 return " ".join(identity_ids) 31 32 33 @app.route('/id', methods=['GET']) 34 def id(): 35 data = create_id() 36 return data 37 38 39 def create_name(): 40 """生成姓名""" 41 names = [fake.name() for i in range(50)] # 生成多个 42 return " ".join(names) 43 44 45 @app.route('/name', methods=['GET']) 46 def name(): 47 data = create_name() 48 return data 49 50 51 def create_text(): 52 """生成一段文本""" 53 paragraph = fake.paragraphs(nb=5) # 生成多段话 54 paragraphs = ''.join(paragraph) # 组合成一句话 55 return " ".join(paragraphs) 56 57 58 @app.route('/text', methods=['GET']) 59 def text(): 60 data = create_text() 61 return data 62 63 64 def create_special(): 65 """生成特殊字符""" 66 chars1 = ['~', '`', '!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '_', '-', '+', '=', ',', '<', '>', '.', '?', 67 '/', '<h1 test>', 68 '¥', ' ', ' ', '{', '}', '[', ']', '|', '\\', ':', '"', 'α', 'π', '★', 'Ⅰ', 'Ⅱ', 'Ⅲ', 'Ⅳ', 'Ⅴ'] 69 chars2 = ['囃囄', '冁囆囇', '壅壆', '壈壌', '壍壐', '嬽嬾', '孁孂孄', '廗廘', '廙廛廜', '懚懛', '懜懝', '怼懠', '灖灗', '濲灙灚', '燿爀', '爁爂爃'] 70 71 c1 = random.sample(chars1, 20) 72 c2 = random.sample(chars2, 1) 73 return ''.join(c1) + c2[0] 74 75 76 @app.route('/special', methods=['GET']) 77 def special(): 78 # return_dict = {'statusCode': '200', 'message': 'successful!', 'result': create_phone()} 79 # return json.dumps(return_dict, ensure_ascii=False) 80 data = create_special() 81 return data 82 83 84 85 if __name__ == '__main__': 86 app.run()