Python webapp2:获取请求时未定义用户名
我正在google app engine上学习使用webapp2进行web编程,并遵循关于udacity的教程(已存档,因此学生社区在那里不活动)。有人能告诉我为什么我的代码中没有定义用户名吗Python webapp2:获取请求时未定义用户名,python,google-app-engine,webapp2,Python,Google App Engine,Webapp2,我正在google app engine上学习使用webapp2进行web编程,并遵循关于udacity的教程(已存档,因此学生社区在那里不活动)。有人能告诉我为什么我的代码中没有定义用户名吗 Traceback (most recent call last): File "/home/tekforce/Desktop/google_appengine/google/appengine/runtime/wsgi.py", line 239, in Handle handler = _
Traceback (most recent call last):
File "/home/tekforce/Desktop/google_appengine/google/appengine/runtime/wsgi.py", line 239, in Handle
handler = _config_handle.add_wsgi_middleware(self._LoadHandler())
File "/home/tekforce/Desktop/google_appengine/google/appengine/runtime/wsgi.py", line 298, in _LoadHandler
handler, path, err = LoadObject(self._handler)
File "/home/tekforce/Desktop/google_appengine/google/appengine/runtime/wsgi.py", line 84, in LoadObject
obj = __import__(path[0])
File "/home/tekforce/Desktop/helloUdacity/hello-udacity.py", line 40, in <module>
class LoginPage(webapp2.RequestHandler):
File "/home/tekforce/Desktop/helloUdacity/hello-udacity.py", line 66, in LoginPage
if not valid_username(username):
NameError: name 'username' is not defined
INFO 2014-02-03 22:07:26,452 module.py:612] default: "GET / HTTP/1.1" 500 -
回溯(最近一次呼叫最后一次):
文件“/home/tekforce/Desktop/google_appengine/google/appengine/runtime/wsgi.py”,第239行,在Handle中
handler=\u config\u handle.add\u wsgi\u中间件(self.\u LoadHandler())
文件“/home/tekforce/Desktop/google\u appengine/google/appengine/runtime/wsgi.py”,第298行,在LoadHandler中
处理程序,路径,err=LoadObject(self.\u处理程序)
LoadObject中的文件“/home/tekforce/Desktop/google_appengine/google/appengine/runtime/wsgi.py”,第84行
obj=\uuuuuuuuuuuuuu导入(路径[0])
文件“/home/tekforce/Desktop/helloUdacity/hello udacity.py”,第40行,在
类登录页面(webapp2.RequestHandler):
文件“/home/tekforce/Desktop/helloUdacity/hello udacity.py”,第66行,登录页面
如果无效,\u用户名(用户名):
名称错误:未定义名称“username”
INFO 2014-02-03 22:07:26452 module.py:612]默认值:“GET/HTTP/1.1”500-
下面是我的python代码,我正在尝试执行
import webapp2
import cgi
import re
def escape_html(s):
return cgi.escape(s, quote=True)
form = """
<!DOCTYPE html>
<html>
<head>
<title>Unit 2 Rot 13</title>
</head>
<body>
<h2>Enter some text to ROT13:</h2>
<form method="post">
<textarea name="text" style="height: 100px; width: 400px; ">
%(text)s
</textarea>
<br>
<input type="submit">
</form>
</body>
</html>
"""
class MainPage(webapp2.RequestHandler):
def write_form(self, text = ''):
self.response.out.write(form % {'text': escape_html(text)})
def get(self):
self.write_form()
def post(self):
content = self.request.get('text').encode('rot13')
self.write_form(content)
class LoginPage(webapp2.RequestHandler):
USER_RE = re.compile(r"^[a-zA-Z0-9_-]{3,20}$")
PASSWORD_RE = re.compile(r"^.{3,20}$")
EMAIL_RE = re.compile(r"^[\S]+@[\S]+\.[\S]+$")
@classmethod
def valid_username(self,username):
return username and LoginPage.USER_RE.match(username)
@classmethod
def valid_password(self,password):
return password and LoginPage.PASSWORD_RE.match(password)
@classmethod
def valid_email(self, email):
return not email or LoginPage.EMAIL_RE.match(email)
def get(self):
self.render("signup.html")
def post(self):
hasError = False
username = self.request.get('username')
password = self.request.get('password')
verify = self.request.get('verify')
email = self.request.get('email')
# These params are send back to rendering,
params = dict(username = username, email = email)
if not valid_username(username):
params['error_username'] = "Thats not a valid user name."
hasError = True
if not valid_password(password):
params['error_username'] = "Thats not a valid password."
hasError = True
elif valid_password(password) != verify:
params['error_verify'] = "Password do not match."
hasError = True
if not valid_email(email):
params['error_email'] = "Thats not a valid email"
hasError = True
if hasError:
self.render("signup.html",**params)
else:
self.redirect('/welcome?username='+username)
class Welcome(BaseHandler):
def get(self):
username = self.request.get('username')
if LoginForm.valid_username(username):
self.render('welcome.html',username = username)
else:
self.redirect('/sign')
app = webapp2.WSGIApplication([('/', MainPage),
('/sign', LoginPage),
('/welcome',welcome)],
debug=True)
导入webapp2
导入cgi
进口稀土
def escape_html:
返回cgi.escape(s,quote=True)
form=”“”
第二单元13
输入一些文本以执行以下操作:
%(文本)s
"""
类主页(webapp2.RequestHandler):
def write_表单(self,text=''):
self.response.out.write(格式%{'text':escape\uHTML(text)})
def get(自我):
self.write_form()
def post(自我):
content=self.request.get('text').encode('rot13'))
自写表格(内容)
类登录页面(webapp2.RequestHandler):
USER_RE=RE.compile(r“^[a-zA-Z0-9_u-]{3,20}$”)
密码\u RE=RE.compile(r“^.{3,20}$”)
电子邮件\u RE=RE.compile(r“^[\S]+@[\S]+\.[\S]+$”)
@类方法
def有效_用户名(self,username):
返回用户名和登录页面。用户匹配(用户名)
@类方法
def有效_密码(self,password):
返回密码和登录页面。密码匹配(密码)
@类方法
def有效电子邮件(自我,电子邮件):
不返回电子邮件或登录页面。电子邮件匹配(电子邮件)
def get(自我):
self.render(“signup.html”)
def post(自我):
hasrerror=False
username=self.request.get('username')
password=self.request.get('password')
verify=self.request.get('verify')
email=self.request.get('email')
#这些参数将被发送回渲染,
params=dict(用户名=用户名,电子邮件=电子邮件)
如果无效,\u用户名(用户名):
params['error_username']=“这不是有效的用户名。”
hasrerror=True
如果密码无效(密码):
params['error_username']=“这不是有效的密码。”
hasrerror=True
elif有效密码(密码)!=核实:
参数['error_verify']=“密码不匹配。”
hasrerror=True
如果无效,请发送电子邮件(电子邮件):
params['error_email']=“这不是有效的电子邮件”
hasrerror=True
如果出现错误:
render(“signup.html”,**参数)
其他:
self.redirect('/welcome?username='+username)
类欢迎(BaseHandler):
def get(自我):
username=self.request.get('username')
如果LoginForm.valid\u用户名(username):
self.render('welcome.html',username=username)
其他:
self.redirect(“/sign”)
app=webapp2.WSGIApplication([(“/”,主页),
(“/签名”,登录页),
(“/欢迎”,欢迎)],
debug=True)
下面是我的signup.html代码
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Sign Up</title>
<style type="text/css">
.label {text-align: right}
.error {color: red}
</style>
</head>
<body>
<h2>Signup</h2>
<form method="post">
<table>
<tbody><tr>
<td class="label">
Username
</td>
<td>
<input type="text" name="username" value="{{username}}">
</td>
<td class="error">
{{error_username}}
</td>
</tr>
<tr>
<td class="label">
Password
</td>
<td>
<input type="password" name="password" value="">
</td>
<td class="error">
{{error_password}}
</td>
</tr>
<tr>
<td class="label">
Verify Password
</td>
<td>
<input type="password" name="verify" value="">
</td>
<td class="error">
{{error_verify}}
</td>
</tr>
<tr>
<td class="label">
Email (optional)
</td>
<td>
<input type="text" name="email" value="{{email}}">
</td>
<td class="error">
{{error_email}}
</td>
</tr>
</tbody></table>
<input type="submit">
</form>
</body>
</html>
注册
.label{text align:right}
.错误{颜色:红色}
报名
用户名
{{error_username}}
暗语
{{error_password}}
验证密码
{{error_verify}}
电子邮件(可选)
{{error_email}}
看起来您的代码有误印(从上的下一行开始)
将代码再缩进一级(这样它就属于post
函数),您应该可以解决这个问题
if not valid_username(username):