Fix Encoding error in suspended account's forgot password
- Fixes issue that lead to crashing the application when a suspended
user with a unicode display name tried to use the reset password
functionality
- Adds a utf-8 displayname in the api v20 tests to catch such issues in
the future
"Bad bot" honeypot response page: provide a better explanation.
In practice humans who have this problem end up filing Launchpad bugs
where we give them this exact response, so the presence of the honeypot
field is not really secret in any way. There's probably no downside to
explaining this right in the page. Humans who get misidentified will see
this and have a chance to get themselves out of trouble.
"Bad bot" honeypot response page: provide a better explanation.
In practice humans who have this problem end up filing Launchpad bugs
where we give them this exact response, so the presence of the honeypot
field is not really secret in any way. There's probably no downside to
explaining this right in the page. Humans who get misidentified will see
this and have a chance to get themselves out of trouble.
- Many tasks depend on using ENV variable so we replace it to point to
env3 so that we can have two distinct python virtualenvs if we need to
test both python 2 and python 3
- Uses django's `force_text` helper function to handle encoding and
decoding for utf-8 since that includes version checking as well
- Uses python_2_unicode_compatible to remove the `__unicode__` function
since this also applies `encode('utf-8')` in the `__str__` function
which is needed in the admin views (this is a bypass for python3)