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