diff --git a/UI/datacheck.py b/UI/datacheck.py
new file mode 100644
index 0000000..b9d5a20
--- /dev/null
+++ b/UI/datacheck.py
@@ -0,0 +1,12 @@
+from flask_wtf import FlaskForm
+from wtforms import StringField, PasswordField
+from wtforms.validators import InputRequired, Length, Regexp
+class LoginForm(FlaskForm):
+ username = StringField('Username', validators=[
+ InputRequired(message='Username is required.'),
+ Regexp(r'^[a-zA-Z][a-zA-Z0-9_]{0,19}$', message='Invalid username format.')
+ ])
+ password = PasswordField('Password', validators=[
+ InputRequired(message='Password is required.'),
+ Length(min=1, max=30, message='Password must be between 1 and 30 characters long.')
+ ])
\ No newline at end of file
diff --git a/UI/main.py b/UI/main.py
index 78a175c..04a3e95 100644
--- a/UI/main.py
+++ b/UI/main.py
@@ -9,6 +9,7 @@ from dotenv import load_dotenv
import time
import socket
import utils
+from datacheck import *
# Load environment variables from .env file
load_dotenv()
@@ -66,9 +67,10 @@ def about():
@app.route('/login', methods=['GET', 'POST'])
def login():
- if request.method == 'POST':
- username = request.form['username']
- password = request.form['password']
+ form = LoginForm()
+ if form.validate_on_submit():
+ username = form.username.data
+ password = form.password.data
# 调用 ExecCommand 执行登录命令
login_response = ExecCommand(f'login -u {username} -p {password}')
@@ -81,9 +83,10 @@ def login():
else:
error = 'An unknown error occurred.'
- return render_template('login.html', error=error)
+ flash(error, 'error')
+ return redirect(url_for('login'))
- return render_template('login.html')
+ return render_template('login.html', form=form)
@app.before_request
def before_request():
diff --git a/UI/templates/base.html b/UI/templates/base.html
index 44cb2f4..623b42f 100644
--- a/UI/templates/base.html
+++ b/UI/templates/base.html
@@ -46,5 +46,6 @@
+