信贷系统搭建——实现登录界面与验证
文章目录
- 前言
- 一、问题描述
- 1.1权限管理
- 1.2业务管理
- 1.3模型管理
- 1.4案例管理
- 二、实现步骤
- 1.构建数据库和xlsx的读入
- 2.登陆界面
- 2.1 初始化窗体
- 2.2 创建窗体背景以及布局
- 2.3 创建登录函数
- 界面
- 总结
前言
想试着用python做个端到端的开发,从后台数据库构建到前端系统界面的实现,并且后期加入模型预测和数据分析的模块,同样在tkinter里面进行实现。虽然treeview我还在继续摸索和学习中,确实对我这种前端小白很不友好,不过想到能打通这个障碍做一个完完整整的系统就很开心。
一、问题描述
信贷系统是银行的核心业务支持系统,根据不同的岗位角色,设定的权限级别不一样。主要的用户角色有:
1.1权限管理
此为系统管理岗对应的模块,主要的功能需求是:
(1)重置密码;
(2)重置流程:将在途流程往回调节点;
(3)客户归属重置:分配用户由哪个客户经理来负责。
1.2业务管理
此为客户经理岗对应的模块,主要的功能需求是:
(1)客户管理
(2)授信管理
(3)放款申请
1.3模型管理
此为模型管理岗对应的模块,主要的功能需求是:
(1)数据统计
(2)模型调整
(3)模型测试
1.4案例管理
此为案例分析岗对应的模块,主要功能需求是:
(1)待判定案例
(2)已判定案例
(3)行内案例集
二、实现步骤
1.构建数据库和xlsx的读入
代码如下(示例):
import sqlite3
import xlrd
conn = sqlite3.connect("./bin/CRM.db") # 打开或创建数据库
c = conn.cursor() # 获取游标
sql_create = ''' CREATE TABLE loginuser (username varchar(6) NOT NULL PRIMARY KEY ,password varchar(16) NOT NULL ,loginrole int,loginerror int);
'''
filename = "CRM.xlsx"
#filename = filename.decode("utf-8").encode("gbk")
ex = xlrd.open_workbook(filename)
sh = ex.sheet_by_name('loginuser')
row_num = sh.nrows
list = [] # 定义列表用来存放数据
for i in range(1, row_num): # 第一行是标题名,对应表中的字段名所以应该从第二行开始,计算机以0开始计数,所以值是1row_data = sh.row_values(i) # 按行获取excel的值value = (row_data[0], row_data[1], row_data[2], row_data[3])list.append(value) # 将数据暂存在列表# print(i)sql = "INSERT INTO loginuser(clientid,password,loginrole,loginerror)\VALUES(%s,%s,%s,%s)"cursor.executemany(sql, list) # 执行sql语句db.commit() # 提交list.clear() # 清空listprint("worksheets: " + sheet + " has been inserted " + str(row_num) + " datas!")conn.close()
2.登陆界面
2.1 初始化窗体
初始化窗体时,主要是设置窗体的标题(title),窗口大小(geometry),窗体的其他属性的申明。这里定义的属性在整个窗体类中有效。
代码如下(示例):
def __init__(self):super().__init__() #Tk类的初始化self.title("xx银行信贷系统")self.geometry('560x320')self.resizable(0,0)tku.center_window(self)self.setup_UI()self.user = "" #当前用户self.pw = "" #当前用户密码
2.2 创建窗体背景以及布局
窗体有几大常用的控件:
- Label:标签控件,可以动态展示或者静态展示,动态时用textvariable获取变量。
- Entry:输入框控件,获取输入的值传给对应的变量。
- Button:按钮控件,主要设置事件响应。
而窗体的布局主要有三种方法:
- grid(row=x,column=y):grid方法的布局是将界面自动划分成表格的样式,有row和column来设置处于“表格”的第几行第几列。但是这个方式不利于展示图片,特别是想将图片作为背景显示的时候。
- pack(side=‘top’/‘left’/‘right’/‘bottom’):pack方法相较于grid方法显得更加的灵活,还可以使用padx和pady来进行对于布局的设定。padx和pady是指相对于窗体/容器的边缘有多少个字符。
注意:pack()和grid()方法不能同时使用,不然会让服务器纠结很久用什么方式来布局. - place(x=digit,y=digit):place方法显得更灵活一点,直接指定控件的位置。
代码如下(示例):
def setup_UI(self):#创建背景画布self.canvas = tk.Canvas(self, height=400, width=600)self.image_file = ImageTk.PhotoImage(file="./welcome.png")self.image = self.canvas.create_image(280, 0, anchor='n', image=self.image_file)self.canvas.pack(side='top')#创建用户名和登录参数self.user_label = tk.Label(self, text='用户名:')self.pwd_label = tk.Label(self, text='密码:')self.username = tk.Entry(self, width=20)self.password = tk.Entry(self, width=20, show='*')self.login_btn = tk.Button(self, command=self.login,text='登录', width=6)self.exit_btn = tk.Button(self, command=self.quit,text='退出', width=6)self.user_label.place(x=130, y=210)self.pwd_label.place(x=130, y=235)self.username.place(x=205, y=210)self.password.place(x=205, y=235)self.login_btn.place(x=130, y=275)self.exit_btn.place(x=310, y=275)
2.3 创建登录函数
登录时需要判断用户的角色是什么,登录进入后会到不同的界面,这样更加便于权限管理的需求。
代码如下(示例):
def login(self):connection = tku.con()curs = tku.cur(connection)self.user = self.username.get()self.pw = self.password.get()query = "select username,password,loginrole,loginerror from loginuser where username='%s'" % self.user curs.execute(query)c = curs.fetchall() # 接收全部信息if len(c) == 0:tk.messagebox.showerror('登录失败', '您没有权限访问哦~如果需要权限,请确保您在CRM系统注册')else:us, pw, lr, lerror = c[0]if lerror >= 3:tk.messagebox.showwarning('登录失败', '您的账号已被锁定,请联系CRM系统解除')elif us == self.user and pw == self.pw:self.destroy()if lr == 1:A = AdminPage(self.user,self.get_now_time())elif lr == 2:C = ClientPage()tku.gui_arrange(C)tk.mainloop()elif lr == 3:CS = CaseStudyPage()tku.gui_arrange(CS)tk.mainloop()elif lr == 4:M = ModelPage()tku.gui_arrange(M)tk.mainloop()elif lr == 5:A = ApprovePage()tku.gui_arrange(A)tk.mainloop()else:tk.messagebox.showwarning('登录失败', '密码错误')
界面
总结
在构建用户登录的中最后将功能尽量模块化,继续关注我后面的博文哦,还会介绍登录成功之后的窗体如何做。以及涉及到参数传递在不同的窗体之间的问题。
信贷系统搭建——实现登录界面与验证相关推荐
- Vue实战篇一: 使用Vue搭建注册登录界面
系列文章目录 Vue基础篇一:编写第一个Vue程序 Vue基础篇二:Vue组件的核心概念 Vue基础篇三:Vue的计算属性与侦听器 Vue基础篇四:Vue的生命周期(秒杀案例实战) Vue基础篇五:V ...
- vue框架搭建前端登录界面
使用vue框架搭建前端登录界面,用v-bind引入类,v-model实现数据绑定,v-on实现事件处理机制的处理. <!DOCTYPE html> <html lang=" ...
- windows2003系统在启动登录界面的时候蓝屏报错:STOP:c0000218 {Registry File Failure}
今天我发现服务器windows2003系统在启动登录界面的时候报出这样子的错误:STOP:c0000218 {Registry File Failure} The registry cannot lo ...
- 登录界面的验证登录以及session的使用
登录界面的验证登录以及session的使用 一.实验要求 (1) 新建 login.jsp 页面,其中,包含登录所需用户名与密码字段. 以及提交(input)和重新填写按钮(reset):表单meth ...
- 东航航空货运系统(三)设计登陆界面与验证登陆
1.7设计登陆界面,实现验证登陆 第一步:添加一个Windows窗体应用程序 1.7 (图1) 选择C#中的Windows窗体,填写窗体名称 1.7(图2) 第二步:根据项目需要和个人设计登陆界面,注 ...
- linux系统一直循环登录界面,Ubuntu 14.04解决登录界面无限循环的方法
在Ubuntu下配置Android的环境时,想像在Windows中那样在终端中直接启动adb,以为Linux和Windows一样,将adb的路径添加到环境变量中,于是将adb的路径也export到/e ...
- EasyUI 搭建后台登录界面和管理系统主界面
EasyUI介绍 1.EasuyUI介绍: EasyUI:简单的界面设计框架,作用主要是用来设计网站的后台管理系统.帮助程序员快速的构建网站界面. 特点: 基于jQuery的一个UI插件 2.Easy ...
- linux系统一直循环登录界面,Ubuntu卡在登陆界面无限循环的问题
某次虚拟机Ubuntu18开机之后,点击用户名输入密码,屏幕一闪接着又返回用户登录界面,无限次循环,已经不是第一次了,第一次的时候直接重装了虚拟机,但是这次虚拟机中有重要的文件,不能进行重装,仔细回想 ...
- 使用HTML5搭建京东登录界面(一)
先来看一下最终的效果: HTML部分的代码如下: <body> <header> <div class="header-content"> &l ...
最新文章
- 2022-2028年全球与中国生物质燃料粒行业市场智研瞻分析报告
- php更改asp.net教程,ASP.NET 教程
- Only Train Once:微软、浙大等研究者提出剪枝框架OTO,无需微调即可获得轻量级架构...
- android注册广播监听按钮,Android实现广播监听HOME键操作
- 极测未来|淘宝千人千面内容下的智能评测技术与实践
- python快速排序代码_Python实现快速排序算法
- 2017.10.6 Java命名规范及使用情况
- educoder实训答案python_Educoder Python入门之经典函数实例
- 【LOJ】#2230. 「BJOI2014」大融合
- 2019年研究生数学建模竞赛优秀论文汇总
- elasticsearch小记之—— unmapped_type的使用
- 图像处理叶片面积matlab,基于Matlab图像处理求植物叶片面积
- Qt QTouchEvent 多点触控
- 跨国企业在中国 | 3M与美的达成家电领域战略合作;舍弗勒南京公司开建新厂房...
- ps、markman、cutterman下载地址
- 青少年中医药文化教育功在当代利在千秋
- consume(consume名词)
- Angular Material 图标素材网址与使用
- 实战 本地服务器Confluence 7.13部署 一篇就够(从0开始安装配置 Debian11 + Mysql + Java)超详细
- 局域网内QQ代理设置
热门文章
- NLPCC-2019 依存句法分析领域移植评测技术分享(封闭情况下双第一)
- Java 随机点名器
- 114个ChatGPT全网最热话题
- Ubuntu系统电池管理软件TLP(Thinkpad设置电池充电阈值)
- python验证角谷_角谷猜想-随心随性无为而为-51CTO博客
- 送人玫瑰,手有余香----七夕情人节的电子玫瑰
- java.lang.NoSuchMethodException: tk.mybatis.mapper.provider.SpecialProvider 使用MySqlMapper的问题
- DotNet 连接 Oracle 10G数据库的测试
- 集大1513 1514班 软件工程第二次作业评分与点评
- cesium模型纹理替换