On 17 Aug 2012, at 7:18 AM, Rob_McC <mrmccorm...@gmail.com> 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 :)

IS_EXPR is an imported function, and runs in its own namespace. It doesn't see 
your globals.

Rather than use IS_EXPR, you'd be better off writing a custom validator. An 
added benefit of doing it that way is that you can include the overhead of 
BADWORDS in the validator's execution code (not its init), so it only gets 
executed when the validator is actually used.

Validators are easy to write. Choose a simple one from gluon/validators.py to 
use as a template. I suggest IS_EQUAL_TO.

> 
> 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