IS_EXPR executes the expression in an environment that only contains the 
value being validated (but not any other globals defined in your model). 
For this to work, you would have to include all of the necessary code in 
the expression (i.e., the definition of badlist and BADWORDS). A better 
option is probably a custom validator.

Anthony

On Friday, August 17, 2012 10:18:57 AM UTC-4, Rob_McC wrote:
>
> Still trying to make my username example, google-like.
>
> Google prohibits a very small set of bad words.
>
> I have a BADWORDS working outside of the validation, but when I insert in 
> validation, I get error.
>
> Any help would be appreciated, I bet it is one little thing :)
>
> I get error
> <type 'exceptions.NameError'> name 'BADWORDS' is not defined- Thanks!
> Rob
>
>
> *Summary:
> * 
> badlist = ['frig', 'asdf', 'poop']
> BADWORDS = re.compile(r'|'.join(badlist))
>
> auth.settings.table_user.username.requires = [IS_LENGTH(30,6,'Please use 
> between 6 and 30 characters.'),
>     IS_MATCH('^[a-z0-9.]*$', error_message='Please use only letters (a-z) 
> and numbers (0-9), and periods.'),
>     IS_NOT_EMPTY(error_message='You can\'t leave this empty. '),
>     IS_EXPR("value[0]<>'.'", error_message='The FIRST character of your 
> username should be a letter (a-z) or number.'),
>     IS_EXPR("value[-1]<>'.'", error_message='The LAST character of your 
> username should be a letter (a-z) or number.'),
>     IS_EXPR("str(value).find('..')==-1",error_message='A fan of 
> punctuation! Alas, usernames can\'t have consecutive periods.'),
>     IS_EXPR("BADWORDS.search(value)", error_message='Bad word'),  
>     IS_NOT_IN_DB(db, auth.settings.table_user.username, 'Someone already 
> has that username. ') 
>     ]
>
>
>
>
> *Complete code, just insert in  a new app. like Welcome..*
>
>
>
> ## -  START CUSTOMIZATION  - - - - - - - - - - - - - - - - - - - - - - ##
>
> # | Summary:
> # |  Modify web2py to allow user registrations similar to 
> # |  Google registrations.
> # |  i.e. 
> # |   - lower case only [a-z]
> # |   - numbers [0-9] and period are OK
> # |   - can't end in a period
> # |   - can't start with a period
> # |   - can't have consecutive periods
> # |   - min 8 letter password
> # |   - username can't be changed once registered
> # |
> # |  Note: Messages are nearly same as Google displays
>
>
> ## create all tables needed by auth if not custom tables 
> #  use usernames rather than email addresses to register
> auth.define_tables(username=True)
>
> # allow username only on registration, but can only
> # be viewed (readable) in Profile
> # user can't change username once registered.
>
> #if auth.is_logged_in():
> #    db.auth_user.username.writable = False
> #    db.auth_user.username.readable = True
>
>
> #custom message for password length - like Google
> # ref:
> """
>
> https://groups.google.com/forum/?fromgroups#!searchin/web2py/$20default$20length$20for$20password/web2py/k5os3bMz228/vG-UOLbhcBUJ[1-25]
> """
>
> #add a comments to exlain policy
>
> db.auth_user.username.comment='NO BAD WORDS..min. 6 letters (a-z), you 
> may use numbers, and periods.'
>
> # apply nearly identical username policy and message that Google Accounts 
> use.
> # this OVERWRITES web2py's default username validation
> # reference and thanks to web2py community for help:
> #   
> https://groups.google.com/forum/?fromgroups#!starred/web2py/HBODB00HMfU[1-25]
>
>
> # this import is required in web2py
> import base64, re
>
> #let's assume:
> #  username can't contain spaces, just a-z and periods
>
> # 'frig' is a very bad word, and "poop" too :)
> # 'sadf' is a racial slur
>
> # so even if a person's name as frig, or asdf in it
> # we will not let them use that.
>
> # asdf    - is a bad username
> # asdfyou - is a bad username
> # youasdf - is a bad username 
>  
> badlist = ['frig', 'asdf', 'poop']
> BADWORDS = re.compile(r'|'.join(badlist))
>
> auth.settings.table_user.username.requires = [IS_LENGTH(30,6,'Please use 
> between 6 and 30 characters.'),
>     IS_MATCH('^[a-z0-9.]*$', error_message='Please use only letters (a-z) 
> and numbers (0-9), and periods.'),
>     IS_NOT_EMPTY(error_message='You can\'t leave this empty. '),
>     IS_EXPR("value[0]<>'.'", error_message='The FIRST character of your 
> username should be a letter (a-z) or number.'),
>     IS_EXPR("value[-1]<>'.'", error_message='The LAST character of your 
> username should be a letter (a-z) or number.'),
>     IS_EXPR("str(value).find('..')==-1",error_message='A fan of 
> punctuation! Alas, usernames can\'t have consecutive periods.'),
>     IS_EXPR("BADWORDS.search(value)", error_message='Bad word'),  
>     IS_NOT_IN_DB(db, auth.settings.table_user.username, 'Someone already 
> has that username. ') 
>     ]
>  
> ## -  END CUSTOMIZATION  - - - - - - - - - - - - - - - - - - - - - - ##
>  
>
>
>
>

-- 



Reply via email to