#判断登录用户 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 16:19:12 浏览: 25
这是判断登录用户的方法。首先获取登录角色、用户名和密码等信息,然后根据不同的角色和账号密码进行判断。如果是管理员角色,且用户名和密码都是正确的,则销毁当前页面,清空用户名和密码输入框,调用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()
```
编写3个JSP程序login. jsp.loginCheck. jsp、main. jsp,程序功能分别是进行用户登录、登录信息处理和登录后的工作页面中获取保存在session中的用户信息。
1. login.jsp
```
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Login Page</title>
</head>
<body>
<h1>Login Page</h1>
<form method="post" action="loginCheck.jsp">
<label for="username">Username:</label>
<input type="text" name="username" id="username" required>
<br>
<label for="password">Password:</label>
<input type="password" name="password" id="password" required>
<br>
<input type="submit" value="Login">
</form>
</body>
</html>
```
2. loginCheck.jsp
```
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String username = request.getParameter("username");
String password = request.getParameter("password");
if(username.equals("admin") && password.equals("123456")) {
session.setAttribute("username", username);
response.sendRedirect("main.jsp");
} else {
out.println("<h1>Invalid username or password!</h1>");
}
%>
```
3. main.jsp
```
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Main Page</title>
</head>
<body>
<h1>Main Page</h1>
<% String username = (String) session.getAttribute("username");
if(username != null) { %>
<p>Welcome <%= username %>!</p>
<p>This is your main page after login.</p>
<% } else { %>
<p>Please login first.</p>
<% response.sendRedirect("login.jsp"); %>
<% } %>
</body>
</html>
```