2013-04-08 95 views
0

我上次写的答案是快速和高效的,所以在这里我再次去。web.py子应用程序错误404。如何处理网址?

我得到了这3个文件,2 .py和一个html。事情是,由于某种原因,我得到了404错误。很明显,我的网址提出了这个问题。这里是我的代码

# encoding: utf-8 

import web 
import os 
import gettext 
import signup 
import verify_email 

urls = (
     "/", 'Index', 
     "/sign-up", signup.app_signup, 
     "/verify_email", verify_email.app_verify_email 
     ) 

# Internacionalización: 
current_directory = os.path.abspath(os.path.dirname(__file__)) 
locales_directory = current_directory + '/i18n' 
gettext.install('messages', locales_directory, unicode = True) 
gettext.translation('messages', locales_directory, languages = ['es']).install(True) 

web.config.debug = False 
app = web.application(urls, locals()) 
session = web.session.Session(app, web.session.DiskStore('sessions')) 
db = web.database(dbn='postgres', user='zoosalud', pw='pbF8zCxd4gZUmhRxd8AsjfhN', db='zoosalud') 

def session_hook(): 
    web.ctx.session = session 
    web.ctx.db = db 
    web.ctx.render = render 

app.add_processor(web.loadhook(session_hook)) 

render = web.template.render('views/', globals = {'session': session, 'db': db, '_': _}) 

class Index: 
    def GET(self): 
     user_input = web.input() 
     user_input.names = '' 
     user_input.surnames = '' 
     user_input.nin = '' 
     user_input.address = '' 
     user_input.municipality = 0 
     user_input.phone = '' 
     user_input.email = '' 
     session.user_input = user_input 
     session.errors = [] 
     return render.access() 

if __name__ == "__main__": 
    app.run() 

这里是我的子应用

# encoding: utf-8 

import bcrypt 
import email_setup 
import uuid 
import web 


urls = (
    "/", "SignUp" 
    ) 

class SignUp: 

    def POST(self): 
     user_input = web.input() 

     web.ctx.session.errors = [] 
     user = web.ctx.db.select('role', where="email='" + user_input.email + "'") 
     if user: 
      web.ctx.session.errors.append('email_taken') 
     user = web.ctx.db.select('role', where="nin='" + user_input.nin + "'") 
     if user: 
      web.ctx.session.errors.append('nin_taken') 
     if user_input.password != user_input.confirm_password: 
      web.ctx.session.errors.append('passwords_not_match') 
     if user_input.municipality == '0': 
      web.ctx.session.errors.append('unselected_municipality') 
     if web.ctx.session.errors: 
      web.ctx.session.user_input = user_input 
      return web.ctx.render.access() 


app_signup = web.application(urls, locals()) 

和我的HTML

<form method=post action="sign-up"> 
     <ul> 
      <li><input name=names required maxlength=24 placeholder=$_('name') value="$session.user_input.names"></li> 
     <li><input name=surnames required maxlength=24 placeholder=$_('surname') value="$session.user_input.surnames"></li> 
     <li><input name=nin requiered maxlength=12 placeholder=$_('nin') value="$session.user_input.nin"></li> 
     <li><input name=address required maxlenght=64 placeholder=$_('address') value="$session.user_input.address"></li> 
     <li><select id=municipality name=municipality> 
      <option value=0>$_('municipality'):</option> 
      $for municipality in municipalities: 
       <option value=$municipality.id>$municipality.name</option> 
     </select></li> 
     <li><input name=phone required maxlength=10 placeholder=$_('phone') value=$session.user_input.phone></li> 
     <li><input name=email type=email required maxlenght=254 placeholder=$_('email') value=$session.user_input.email></li> 
     <li><input name=password type=password required placeholder=$_('password')></li> 
     <li><input name=confirm_password type=password required placeholder=$_('confirm_password')></li> 
     <li><input type=submit value="$_('sign_up')"></li> 
</ul> 

,因为我提的就是error404当我映射到“问题/“在子应用程序中,这很奇怪,因为当我映射到”“它可以工作,但现在我需要映射它,以便可以使用GET获取路径,并且该解决方案无法长期发挥作用。

在此先感谢球员。

回答

1

您可以将子应用程序映射更改为"/?", "SignUp",因此它应该可以使用和不使用斜线。

+0

问题实际上是一个错字,我映射的是verify_email而不是verify-email。不管怎么说,多谢拉! – Lightster 2013-04-09 15:21:03