嘿,任何人都可以告诉我为什么这段代码没有在页面顶部返回get方法用户名。当您输入提交按钮时,我希望欢迎传递包含网址中用户名的参数。示例:对于username =“thisisme”,我们应该获取的URL应为“.... \ welcome?username = thisisme”。我在谷歌应用引擎上工作。
import webapp2
import cgi
form="""
form method="post">
<h2>This is the SignUp Page</h2>
<br>
<div><label>   Username: <input type="text" name="username" value="%(name)s"></label><span style="color:red">%(error1)s</span></div>
<div><label>    Password: <input type="password" name="password" value="%(pas)s"></label><span style="color:red">%(error2)s</span></div>
<div><label> Verify Password: <input type="password" name="verify" value="%(vpas)s"></label><span style="color:red">%(error3)s</span></div>
<div><label> Email (optional): <input type="text" name="email" value="%(email)s"></label><span style="color:red">%(error4)s</span></div>
<br><br>
<input type="submit">
</form>"""
def escape_html(s):
return cgi.escape(s, quote = True)
def valid_name(n):
valid=set("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890-_")
if set(n).issubset(valid):
return n
else:
return None
def valid_pas(p):
if p.__len__()<6:
return None
else:
return p
def valid_vpas(v, p):
if v==p:
return v
else:
return None
def valid_email(e):
if '@gmail.com' in e or '@hotmail.com' in e or '@illinois.edu' in e or '@yahoo.com' in e or ''==e:
return True
else:
return None
class MainHandler(webapp2.RequestHandler):
def write_form(self, error1="", error2="", error3="", error4="", name="", pas="", vpas="", email=""):
self.response.write(form % {"error1":error1, "error2":error2, "error3":error3, "error4":error4, "name":escape_html(name), "pas":escape_html(pas), "vpas":escape_html(vpas), "email":escape_html(email)})
def get(self):
self.write_form()
def post(self):
a1=" "
a2=" "
a3=" "
a4=" "
flag=0
global user_name
user_name=self.request.get('username')
user_pas=self.request.get('password')
user_vpas=self.request.get('verify')
user_email=self.request.get('email')
name=valid_name(user_name)
pas=valid_pas(user_pas)
vpas=valid_vpas(user_vpas, user_pas)
email=valid_email(user_email)
if not name:
a1="Please enter no special characters or white spaces in this field"
flag=1
if not pas:
a2="Please enter a valid password six characters long"
flag=1
if not email:
a4="Don't enter it or Enter @gmail.com, @yahoo.com, @hotmail.com or @illinois.edu"
flag=1
if not vpas:
a3="The passwords don't seem to match sir"
flag=1
if flag==1:
self.write_form(a1, a2, a3, a4, user_name, user_pas, user_vpas, user_email)
flag=0
else:
self.redirect("/welcome")
class SignHandler(webapp2.RequestHandler):
def get(self):
self.response.write('Welcome, {}'.format(user_name))
app = webapp2.WSGIApplication([('/', MainHandler), ('/welcome', SignHandler)], debug=True)
答案 0 :(得分:1)
这实际上似乎不是服务器端问题,而是您为表单设置的客户端代码问题。
而不是
<form method='post'
使用
<form method='get'
编辑: 如果您只想要URL中的用户名,请使用jquery将表单动态提交到
YOUR_URL?用户名= 用户名
您可以从这里获得帮助: Submit a form using jQuery
编辑2: 这是您需要在html中插入的内容。在表单标记开始之前粘贴它,以便按照您想要的方式使用jquery。 :
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script>
$(document).ready(function(){
$("form:first").submit(function(){
un = $("form:first input[name='username']").val();
$("form:first").attr('action',location.href + "?username=" + un);
});
});
</script>
通常,这应该在head标签内,但无论如何..
答案 1 :(得分:0)
缺少角括号
而不是
form>
使用
<form
你不能指望它在URL中有用户名。