我是一名剛出生的嬰兒程序員,發現我不瞭解GAE的一些內容。請求處理程序和GAE中的app.yaml
我有我的app.yaml設置路由到不同的應用程式
handlers:
- url: /favicon\.ico
static_files: favicon.ico
upload: favicon\.ico
- url: /unit3.*
script: unit3.app
- url: /birthday.*
script: birthday.app
- url: /signup.*
script: signup.app
- url: /rot13.*
script: rot13.app
- url: .*
script: main.app
,然後裏面signup.app - 在WSGI一個簡單的POST請求
import webapp2
import jinja2
import os
import re
template_dir=os.path.join(os.path.dirname(__file__), 'templates')
jinja_env= jinja2.Environment(loader= jinja2.FileSystemLoader(template_dir), autoescape = True)
USER_RE = re.compile(r"^[a-zA-Z0-9_-]{3,20}$")
def valid_username(username):
return username and USER_RE.match(username)
PASS_RE = re.compile(r"^.{3,20}$")
def valid_password(password):
return password and PASS_RE.match(password)
EMAIL_RE = re.compile(r'^[\S][email protected][\S]+\.[\S]+$')
def valid_email(email):
return not email or EMAIL_RE.match(email)
def render_str(template,**parms):
t = jinja_env.get_template(template)
return t.render(parms)
class BaseHandler(webapp2.RequestHandler):
""" a BaseHandler object to render and write """
def render(self, template, **kw):
self.response.out.write(render_str(template, **kw))
def write(self, *a, **kw):
self.response.out.write(*a, **kw)
class SignUpHandler(BaseHandler):
def get(self):
self.render('signup.html')
def post(self):
have_error=False
username=self.request.get('username')
password=self.request.get('password')
verify=self.request.get('verify')
email=self.request.get('email')
params = dict(username = username,
email = email)
if not valid_username(username):
params['name_error']='that is not a valid name'
have_error=True
if not valid_password(password):
params['password_error']=('that is not a valid password')
have_error=True
elif password != verify:
params['verify_error']='your passwords dont match'
have_error=True
if not valid_email(email):
params['email_error']='that is not a valid email address'
have_error=True
if have_error:
params['message']=('Please type your info in again ' + username)
self.render('signup.html', **params)
else:
self.redirect('welcome?username=' + str(username))
class WelcomeHandler(BaseHandler):
def get(self):
username = self.request.get('username')
if valid_username(username):
self.render('welcome.html', username = username)
else:
self.redirect('signup')
app = webapp2.WSGIApplication([('/signup',SignUpHandler),
('/welcome',WelcomeHandler)]
,debug=True)
後轉到人民歡迎頁面儘管WelcomeHandler沒有找到模板化的html文件,但我得到了404。
基本上,我通過RequestHandler路由到任何東西。
我敢肯定,這是一個基本的誤解,我忽略了,不能用谷歌搜索輕鬆修正。
我是否需要路由.yaml中的所有內容?爲什麼不是這種情況,當我只有通用的URL處理程序?
你可以多發佈一下你的'signup.py'文件嗎?一般來說,你使用'webapp2.WSGIApplication'來設置你的應用程序內部的路由(如你所做的那樣),所以很可能在一個(或多個)類中存在一個小錯誤。 – RocketDonkey
@RocketDonkey我更新了包括整個signup.py – underarock
酷的交易 - @ bossylobster的答案看起來像要走的路,所以如果它的工作,點擊他的答案的分數下的複選標記'接受'它(它關閉問題的循環)。祝你一切順利! – RocketDonkey