def process_request(self, request):
translation.activate(self.get_language_for_user(request))
request.LANGUAGE_CODE = translation.get_language()
python类activate()的实例源码
def process_request(self, request):
account = getattr(request.user, "account", None)
if account:
tz = settings.TIME_ZONE if not account.timezone else account.timezone
timezone.activate(tz)
def process_request(self, request):
if request.user.is_authenticated() and request.user.timezone:
timezone.activate(pytz.timezone(request.user.timezone))
else:
timezone.deactivate()
def process_request(self, request):
if request.user.is_authenticated:
if request.user.timezone is not None:
timezone.activate(pytz.timezone(request.user.timezone))
else:
timezone.activate(pytz.timezone('UTC'))
else:
timezone.deactivate()
def process_request(self, request):
"""Adds data necessary for Horizon to function to the request."""
request.horizon = {'dashboard': None,
'panel': None,
'async_messages': []}
if not hasattr(request, "user") or not request.user.is_authenticated():
# proceed no further if the current request is already known
# not to be authenticated
# it is CRITICAL to perform this check as early as possible
# to avoid creating too many sessions
return None
if request.is_ajax():
# if the request is Ajax we do not want to proceed, as clients can
# 1) create pages with constant polling, which can create race
# conditions when a page navigation occurs
# 2) might leave a user seemingly left logged in forever
# 3) thrashes db backed session engines with tons of changes
return None
# If we use cookie-based sessions, check that the cookie size does not
# reach the max size accepted by common web browsers.
if (
settings.SESSION_ENGINE ==
'django.contrib.sessions.backends.signed_cookies'
):
max_cookie_size = getattr(
settings, 'SESSION_COOKIE_MAX_SIZE', None)
session_cookie_name = getattr(
settings, 'SESSION_COOKIE_NAME', None)
session_key = request.COOKIES.get(session_cookie_name)
if max_cookie_size is not None and session_key is not None:
cookie_size = sum((
len(key) + len(value)
for key, value in six.iteritems(request.COOKIES)
))
if cookie_size >= max_cookie_size:
LOG.error(
'Total Cookie size for user_id: %(user_id)s is '
'%(cookie_size)sB >= %(max_cookie_size)sB. '
'You need to configure file-based or database-backed '
'sessions instead of cookie-based sessions: '
'http://docs.openstack.org/developer/horizon/topics/'
'deployment.html#session-storage'
% {
'user_id': request.session.get(
'user_id', 'Unknown'),
'cookie_size': cookie_size,
'max_cookie_size': max_cookie_size,
}
)
tz = request.session.get('django_timezone')
if tz:
timezone.activate(tz)
def user_preference(request):
current_user = User.objects.get(username=request.user.username)
if request.method == 'POST':
if request.POST.get('cancel_button'):
messages.warning(request, _(u"Changing user settings canceled"))
return HttpResponseRedirect(reverse('home'))
else:
errors = {}
stprofile = StProfile.objects.get_or_create(user=current_user)[0]
form_first_name=request.POST.get('first_name', '').strip()
current_user.first_name = form_first_name
form_last_name=request.POST.get('last_name', '').strip()
current_user.last_name = form_last_name
form_email=request.POST.get('email', '').strip()
users_same_email = User.objects.filter(email=form_email)
if len(users_same_email) > 0 and current_user.email != form_email:
current_user.email = form_email
errors['email'] = _(u"This email address is already in use." +
" Please enter a different email address.")
elif len(form_email) > 0:
try:
validate_email(form_email)
except ValidationError:
errors['email'] = _(u"Enter a valid email address")
else:
current_user.email = form_email
form_language=request.POST.get('lang')
if stprofile.language != form_language:
stprofile.language = form_language
translation.activate(form_language)
request.session[translation.LANGUAGE_SESSION_KEY] = form_language
form_time_zone=request.POST.get('time_zone')
if stprofile.time_zone != form_time_zone:
stprofile.time_zone = form_time_zone
timezone.activate(form_time_zone)
request.session['django_timezone'] = form_time_zone
if errors:
messages.error(request, _(u'Please, correct the following errors'))
return render(request, 'students/user_preference.html',
{'current_user': current_user, 'timezones': pytz.common_timezones, 'errors': errors})
current_user.save()
stprofile.save()
messages.success(request, _(u"User settings changed successfully"))
return HttpResponseRedirect(reverse('home'))
else:
return render(request, 'students/user_preference.html',
{'current_user': current_user, 'timezones': pytz.common_timezones})
def test_all(boite, mocker):
timezone.activate('Africa/Niamey')
now = timezone.now()
now = now.replace(year=2000, month=1, day=13, hour=13, minute=35, second=1)
mocker.patch('laboite.apps.time.models.timezone.now', return_value=now)
translation.activate('fr')
with mocker.patch('laboite.apps.time.models.AppTime.should_update',
return_value=True): # Force update
app = AppTime.objects.create(boite=boite,
enabled=True,
tz='Africa/Niamey')
result = app.get_app_dictionary()
assert len(result) == 3
assert result['data'] == [{'type': 'text',
'width': 25,
'height': 8,
'x': 4,
'y': 1,
'content': '14:35'}]
assert result['height'] == 8
assert result['width'] == 32
app.tz = 'Pacific/Pitcairn'
app.save()
result = app.get_app_dictionary()
assert len(result) == 3
assert result['data'] == [{'type': 'text',
'width': 25,
'height': 8,
'x': 4,
'y': 1,
'content': '05:35'}]
assert result['height'] == 8
assert result['width'] == 32
translation.activate('en-us')
result = app.get_app_dictionary()
assert len(result) == 3
assert result['data'] == [{'type': 'text',
'width': 25,
'height': 8,
'x': 4,
'y': 1,
'content': '5:35 a.m.'}]
assert result['height'] == 8
assert result['width'] == 32
def create_jwt_payload(user, expiration_delta, issuer, version=None, **kwargs):
timezone.activate(settings.TIME_ZONE)
now = timezone.now()
expiration_date = now + datetime.timedelta(seconds=expiration_delta)
version = settings.JWT_VERSION if not version else version
not_before = now - datetime.timedelta(
seconds=settings.JWT_NBF_LEEWAY_SECONDS)
payload = {
"user": {
"id": user.id,
"username": user.username,
"email": user.email,
"first_name": user.first_name,
"last_name": user.last_name,
},
# used jwt RFC claims
# JWT expiration
"exp": int(expiration_date.strftime("%s")),
# Issuer of the token
"iss": issuer,
# Issued at
"iat": int(now.strftime("%s")),
# # Not before (dont use before)
"nbf": int(not_before.strftime("%s")),
# # Subject of the token
# "sub":
# # Audience of the token
# "aud":
# # JWT token id
# "jti":
# Version of the token
"version": version,
}
# Only set the permissions on the jwt token if forcen on settings
if settings.JWT_SET_PERMISSION_ON_TOKEN:
payload["permission"] = list(
user.project_permissions.values_list('key', flat=True))
# Set extra args
for k, v in kwargs.items():
payload[k] = v
return payload