#判断登录用户 def loginCheck(self): role = self.usrrole.get() name = self.username.get() secret = self.password.get() if role == 1 and name == "admin" and secret == "123456": self.page.destroy() self.username.set('') self.password.set('') ManagerPage(name,self.root) mb.showinfo('登录成功', '欢迎:%s' % name) elif role == 3: login = login_student(name) if len(login) == 0: mb.showerror("登录失败", "账号不存在") pth = login[0] print(pth) if name == pth[1] and secret == pth[0]: self.page.destroy() self.username.set('') self.password.set('') StudentPage(name, self.root) mb.showinfo('登录成功', '欢迎:%s' % name) else: mb.showinfo(title='错误', message='账号或密码错误!') else: mb.showinfo(title='错误', message='账号或密码错误!') self.username.set('') self.password.set('') def __setusrstr(self): if self.usrrole.get() == 1: self.username.set("admin") elif self.usrrole.get() == 3: self.username.set("请输入学生姓名") def exitsys(self): if mb.askyesno("退出系统", "你确定更要退出系统"): self.page.destroy() self.root.destroy()
时间: 2024-02-14 18:19:12 浏览: 102
这是判断登录用户的方法。首先获取登录角色、用户名和密码等信息,然后根据不同的角色和账号密码进行判断。如果是管理员角色,且用户名和密码都是正确的,则销毁当前页面,清空用户名和密码输入框,调用ManagerPage类创建管理员页面,并弹出登录成功的提示信息。如果是学生角色,先根据学生姓名查询数据库,如果找不到对应的账号,则弹出账号不存在的提示信息。如果存在对应的账号,则判断用户名和密码是否正确,如果正确则执行类似管理员的操作。如果角色不是管理员或学生,则弹出账号或密码错误的提示信息,并清空用户名和密码输入框。另外还有两个辅助方法,一个用来设置默认的用户名,一个用来退出系统。
相关问题
优化这段代码import tkinter import pymysql def logincheck(root,inputuser,inputpwd): userval = inputuser.get() pwdval = inputpwd.get() db = pymysql.connect(host="127.0.0.1",port=3306,user='root',passwd='12345678',db='AICarNumber') cursor = db.cursor() sqlstr = "select * from user where username='"+userval+"'and pwd='"+pwdval+"'" cursor.execute(sqlstr) results = cursor.fetchall() if (len(results) >0): print("验证通过!") root.quit() root.destroy() else: print("验证失败!") db.close() def reset(): name = username.set('') pwd = passwd.set('') print(name,pwd) tkinter.showinfo('成功','重置成功') username = '' passwd = '' def login(): print("login...") root = tkinter.Tk() root.title("登录界面") root.geometry("250x70") username = tkinter.StringVar() passwd = tkinter.StringVar() tkinter.Label(root,text="用户名:").grid(row=0) tkinter.Label(root,text="密码").grid(row=1) tkinter.Entry(root,textvariable=username).grid(row=0,column=1) tkinter.Entry(root,textvariable=passwd,show='$').grid(row=1,column=1) tkinter.Button(root,text="登录",command=(lambda tk=root,x=username,y=passwd:logincheck(tk,x,y)))\ .grid(row=0,column=2,rowspan=2) resetNome_login = tkinter.Button(root, text='退出', command=reset) resetNome_login.grid(row=2,column=2) root.mainloop() if __name__ =='__main__': login()
这段代码可以进行如下优化:
1. 使用with语句来自动关闭数据库连接,避免忘记关闭而导致的资源泄露。
2. 使用参数化查询来避免SQL注入攻击,将用户输入的值作为参数传递给查询语句。
3. 将重置函数reset()中的全局变量username和passwd改为局部变量,避免与输入框的变量名重复。
4. 将重置函数reset()重命名为clear(),更符合其实际功能。
5. 优化代码结构,将登录窗口的创建和显示分离成两个函数,使代码更加清晰易懂。
下面是优化后的代码:
```
import tkinter
import pymysql
def clear(username_entry, passwd_entry):
username_entry.delete(0, tkinter.END)
passwd_entry.delete(0, tkinter.END)
tkinter.messagebox.showinfo('成功','重置成功')
def logincheck(root, username_entry, passwd_entry):
userval = username_entry.get()
pwdval = passwd_entry.get()
with pymysql.connect(host="127.0.0.1", port=3306, user='root', passwd='12345678', db='AICarNumber') as cursor:
sqlstr = "select * from user where username=%s and pwd=%s"
cursor.execute(sqlstr, (userval, pwdval))
results = cursor.fetchall()
if len(results) > 0:
print("验证通过!")
root.quit()
root.destroy()
else:
print("验证失败!")
def create_login_window():
root = tkinter.Tk()
root.title("登录界面")
root.geometry("250x70")
username_entry = tkinter.Entry(root)
passwd_entry = tkinter.Entry(root, show='$')
username_entry.grid(row=0,column=1)
passwd_entry.grid(row=1,column=1)
tkinter.Label(root,text="用户名:").grid(row=0)
tkinter.Label(root,text="密码").grid(row=1)
tkinter.Button(root,text="登录",command=(lambda tk=root,x=username_entry,y=passwd_entry:logincheck(tk,x,y))).grid(row=0,column=2,rowspan=2)
tkinter.Button(root, text='重置', command=(lambda x=username_entry, y=passwd_entry: clear(x,y))).grid(row=2,column=1)
tkinter.Button(root, text='退出', command=root.quit).grid(row=2,column=2)
return root
def show_login_window():
login_window = create_login_window()
login_window.mainloop()
if __name__ =='__main__':
show_login_window()
```
@ResponseBody @RequestMapping("/userReg") public String userReg(String userName,String passWord){ User user=new User(); user.setUname(userName); String md5Pwd = MD5Utils.encode(passWord); user.setPassword(md5Pwd); if(userService.userReg(user)){ return "success"; } return "false"; } @ResponseBody @RequestMapping("/loginCheck") public String loginCheck(String userName,String passWord,HttpSession session){ if(userName==null||userName.equals("")){ return "nameEmpty"; } if(passWord==null||passWord.equals("")){ return "pwdEmpty"; } User user=new User(); user.setUname(userName); String md5Pwd = MD5Utils.encode(passWord); user.setPassword(md5Pwd); if(userService.userLogin(user).getUid()!=null){ User sessionUser=userService.userLogin(user); sessionUser.setPassword(""); session.setAttribute("user",sessionUser); return "success"; } return "false"; }解释这段代码
这段代码是一个简单的用户注册和登录功能的实现。
1. `@ResponseBody` 注解表示该方法返回的是字符串类型的数据,会直接返回给前端页面。
2. `@RequestMapping("/userReg")` 注解表示该方法对应的 URL 地址是 "/userReg"。
3. `public String userReg(String userName,String passWord)` 方法接收两个字符串类型的参数,即用户名和密码。
4. `User user=new User();` 创建一个 User 对象。
5. `user.setUname(userName);` 将接收到的用户名设置到 User 对象中。
6. `String md5Pwd = MD5Utils.encode(passWord);` 对接收到的密码进行 MD5 加密。
7. `user.setPassword(md5Pwd);` 将加密后的密码设置到 User 对象中。
8. `if(userService.userReg(user)){...}` 调用 UserService 中的 userReg 方法进行用户注册,如果注册成功则返回 "success",否则返回 "false"。
9. `@RequestMapping("/loginCheck")` 注解表示该方法对应的 URL 地址是 "/loginCheck"。
10. `public String loginCheck(String userName,String passWord,HttpSession session)` 方法接收三个参数,即用户名、密码和 HttpSession 对象。
11. `if(userName==null||userName.equals("")){...}` 判断用户名是否为空,如果为空则返回 "nameEmpty"。
12. `if(passWord==null||passWord.equals("")){...}` 判断密码是否为空,如果为空则返回 "pwdEmpty"。
13. `User user=new User();` 创建一个 User 对象。
14. `user.setUname(userName);` 将接收到的用户名设置到 User 对象中。
15. `String md5Pwd = MD5Utils.encode(passWord);` 对接收到的密码进行 MD5 加密。
16. `user.setPassword(md5Pwd);` 将加密后的密码设置到 User 对象中。
17. `if(userService.userLogin(user).getUid()!=null){...}` 调用 UserService 中的 userLogin 方法进行用户登录,如果登录成功则将 User 对象存入 HttpSession 中,并返回 "success",否则返回 "false"。
总的来说,这段代码实现了用户注册和登录功能,通过使用 Spring MVC 框架,将请求映射到对应的方法上,并使用注解方式简化了代码。
阅读全文