Python 用户注册表单-仅在错误输入时显示错误消息
请看我在本地运行的web应用程序的屏幕截图: 正如您可能想象的那样,我试图在用户出错时创建错误消息。触发错误消息有五个参数:Python 用户注册表单-仅在错误输入时显示错误消息,python,forms,function,class,post,Python,Forms,Function,Class,Post,请看我在本地运行的web应用程序的屏幕截图: 正如您可能想象的那样,我试图在用户出错时创建错误消息。触发错误消息有五个参数: 用户没有输入用户名 用户名无效--包含空格字符,不在3到20个字符之间,和/或包含非a-z、a-z、0-9的字符 密码无效--它不在3到20个字符之间 密码不匹配--“验证密码”与“密码”不同 电子邮件无效--必须匹配(r'^[\S]+@[\S]+\.\]+$),表示一组字符、一个@符号、一组字符、一个句点和一组字符 如您所见,我的代码当前在加载页面时显示错误消息,而不
(r'^[\S]+@[\S]+\.\]+$)
,表示一组字符、一个@符号、一组字符、一个句点和一组字符李>
如您所见,我的代码当前在加载页面时显示错误消息,而不是在用户点击“提交”之后
我无法在网站上托管此web应用,原因如下(我的托管服务HostGator不支持WebApp2,并且我无法将存储库上载到Google Cloud)
为了提供帮助,您可能需要在本地测试这些文件(可能通过Google App Engine)。下面是指向我的GitHub存储库的链接以及文件main.py的代码:
代码中的所有其他内容看起来都一样。我不知道为什么当参数没有像我想的那样满足时,错误消息没有显示出来。如果可以的话请帮忙,谢谢 首先,您的错误消息显示在文本框的左侧,因为这是您将它们放在表中的位置。在执行字符串替换时,当用户输入错误时,您希望消息显示在标签的右侧。因此,您的表应该如下所示:
class MainHandler(webapp2.RequestHandler):
def get(self):
content = Build_Page("")
self.response.write(content)
def post(self):
# look inside the request to figure out what the user typed
have_error = False
username = self.request.get("username")
password = self.request.get("password")
verify_password = self.request.get("verify_password")
email = self.request.get("email")
params = dict(username = username,
email = email)
# if the user typed nothing at all, redirect
if (not username) or (username.strip() == ""):
#error = "Please enter a valid username."
#self.response.write(error)
#self.redirect("/?error=" + cgi.escape(error, quote=True))
params['error_username'] = "Please enter a valid username."
have_error = True
if (not password) or (password.strip() == ""):
#error = "Please enter a username."
#self.response.write(error)
#self.redirect("/?error=" + cgi.escape(error, quote=True))
params['error_password'] = "Please enter a valid password."
have_error = True
if have_error:
self.render('signup-form.html', **params)
else:
self.redirect('/unit2/welcome?username=' + username)
import webapp2
import cgi
import re
form = """
<h1>User Signup</h1>
<form method = "post">
<table>
<tr>
<td>
<label>Username: <input type="text" name="username"/></label>
</td>
<td>
<label style="color:red">{username_message}</label>
</td>
</tr>
<tr>
<td>
<label>Password: <input type="text" name="password"/></label>
<td>
<label style="color:red">{password_message}</label>
</td>
</td></tr>
<tr>
<td>
<label>Verify Password: <input type="text" name="verify_password"/>
</label>
<td>
<label style="color:red">{password_match_message}</label>
</td>
</td></tr>
<tr>
<td>
<label>Email (optional): <input type="text" name="email"/></label>
<td>
<label style="color:red">{email_message}</label>
</td>
</td></tr>
</table>
<input type = 'submit'/>
</form>
"""
同样在MainHandler类中,您希望创建一个helper函数,该函数的参数最初将变量设置为空字符串
class MainHandler(webapp2.RequestHandler):
def helper(self, user_message="", user_password="", match_password="",
user_email=""):
#string substitution
self.response.write(form.format(username_message= user_message,
password_message= user_password,
password_match_message= match_password,
email_message= user_email
))
有关字符串替换的更多信息,请参见这些链接(这就是“.format”的作用):
接下来使用get方法获取表单中输入的信息。使用您创建的helper函数获取为变量输入的信息
def get(self):
self.helper()
现在在post方法中,您将查看请求内部,以了解用户键入的内容
def post(self):
# look inside the request to figure out what the user typed
username = self.request.get("username")
password = self.request.get("password")
verify_password = self.request.get("verify_password")
email = self.request.get("email")
params = dict(username = username,
email = email)
然后,您将创建if语句来测试是否满足了需求。首先,您需要创建一个场景,其中用户满足所有需求。在这种情况下,您需要将它们重定向到欢迎页面
#if valid_username(username) == "" or ! valid_username
user_message=""
user_password=""
match_password=""
user_email=""
if valid_username(username) and valid_password(password) and equal_password(password, verify_password) and valid_email(email):
self.redirect('/welcome?username=' + username)
然后,您将设置用户不满足要求时的if语句:
if not valid_username(username):
user_message="Username not valid"
if not valid_password(password):
user_password="Password not valid"
if not equal_password(password, verify_password):
match_password="Passwords must match"
if email is not "" and not valid_email(email):
user_email="Please enter a valid email"
self.response.write(form.format(username_message= user_message,
password_message= user_password,
password_match_message= match_password,
email_message= user_email
))
如果用户输入了正确的信息,您将希望重定向到欢迎页面。创建一个新类Welcome
,该类通过获取用户输入的用户名来定义要编写的内容
class Welcome(webapp2.RequestHandler):
def get(self):
username = self.request.get('username')
if valid_username(username):
self.response.write(welcome.format(username = username))
#html for welcome page
welcome = """
<!DOCTYPE html>
<html>
<head>
<title>
User Signup
</title>
</head>
<body>
#string substitution for username
<h2>Welcome, {username}!</h2>
</body>
</html>
"""
if not valid_username(username):
user_message="Username not valid"
if not valid_password(password):
user_password="Password not valid"
if not equal_password(password, verify_password):
match_password="Passwords must match"
if email is not "" and not valid_email(email):
user_email="Please enter a valid email"
self.response.write(form.format(username_message= user_message,
password_message= user_password,
password_match_message= match_password,
email_message= user_email
))
class Welcome(webapp2.RequestHandler):
def get(self):
username = self.request.get('username')
if valid_username(username):
self.response.write(welcome.format(username = username))
#html for welcome page
welcome = """
<!DOCTYPE html>
<html>
<head>
<title>
User Signup
</title>
</head>
<body>
#string substitution for username
<h2>Welcome, {username}!</h2>
</body>
</html>
"""
app = webapp2.WSGIApplication([
('/', MainHandler),
('/welcome', Welcome)
], debug=True)