2012-08-22 4 views
0

저는 web2py에서 새로운데, 고생하고 있습니다.web2py sqlform 오류

등록 및 로그인 항목을 작성하려고합니다. 모델에서 나는 CONTROLER에서 이제 새로운 사용자

에 대한
usersdb = DAL('postgres://postgres:[email protected]/'+ request.vars['school'], migrate=True) 
auth = Auth(usersdb, hmac_key=Auth.get_or_create_key()) 
usersdb.define_table(
    'users', 
    Field('first_name', length=128, default=''), 
    Field('last_name', length=128, default=''), 
    Field('email', length=128, default='', unique=True), 
    Field('address', length=256, default=''), 
    Field('postcode', length=128, default=''), 
    Field('city', length=128, default=''), 
    Field('password', 'password', length=512, readable=False, label='Password'), 
    Field('registration_key', length=512, writable=False, readable=False, default=''), 
    Field('reset_password_key', length=512, writable=False, readable=False, default=''), 
    Field('registration_id', length=512, writable=False, readable=False, default=''), 
    format='%(first_name)s %(last_name)s') 

을 tabel을 만들려면 다음 코드를 나는 다음과 같은 코드가 있습니다

usersdb = DAL('postgres://postgres:[email protected]/'+ request.vars['school'], migrate=True) 
auth = Auth(usersdb, hmac_key=Auth.get_or_create_key()) 
auth.settings.registration_requires_approval = True 
form = SQLFORM(usersdb.users) 
if form.process(session=None, formname='test').accepted: 
    response.flash = 'form accepted' 
elif form.errors: 
    response.flash = 'form has errors' 
else: 
    response.flash = 'please fill the form' 
# Note: no form instance is passed to the view 

#set sample validator (do not allow empty nor duplicate names) 
return dict(form=form,config=config) 

오류가 SQLFORM (usersdb.users)에서 loged됩니다. 'users'

실제로이 물건이 어떻게 작동하는지 (데이터베이스를 조절기에 연결하는 것) 모르겠다. 나는 smb가 작성한 코드를 해킹하고있다. 그밖에.

조언이나 간단한 설명에 감사드립니다.

당신은 컨트롤러에 userdb 또는 auth의 정의를 반복하지 말아야

답변

1

안녕. 모델 파일은 모든 요청 (조건부 모델 파일 제외)에서 실행되며 컨트롤러는 모델에 정의 된 모든 객체를 포함하는 환경에서 실행됩니다. 컨트롤러에서 원래 userdb 개체를 새로 덮어 쓰고 auth을 다시 정의하지만 "users"테이블을 다시 만들지 않으므로 userdb에 더 이상 "users"테이블이 없습니다.

userdbauth 정의를 컨트롤러에서 제거하면됩니다.

+0

하지만 대신에 어떻게 양식을 얻을 수 있습니까? 나는 SQLFORM을 사용하지만 userdb를 제거하면 오류가 발생합니다. – Yebach

+0

모델 파일 (즉,/models 폴더의 파일)에'usersdb'를 정의한 경우에는 전역 적으로 사용할 수 있습니다 모든 컨트롤러. 그렇지 않은 경우 모델 파일에서 제대로 정의하지 않은 것입니다. 어떤 오류가 발생합니까? – Anthony

+0

그래서 model/db.py auth = Auth (db, hmac_key = Auth.get_or_create_key())auth.define_tables()에서 auth 데이터베이스를 만들었고 controler에서 함수 사용자 반환 dict (form = auth . 나는 web2py의 샘플에서 복사했습니다. 오류를 수신합니다. NameError : 전역 이름 'auth'가 정의되지 않았습니다. web2py 로그인 및 등록의 샘플 페이지에 거의 동일한 코드가 있습니다. – Yebach