#python-3.x #django #google-chrome
#python-3.x #django #google-chrome
Вопрос:
Пожалуйста, пропустите эту первую часть и найдите раздел обновления… Я задал вопрос вчера, но удалил его, потому что, похоже, я дал слишком мало информации и плохо объяснил вопрос. Но это отчасти решаемая проблема, но решения касаются разных проблем. Я только что реализовал идеи по этой конкретной проблеме, и я хотел бы поделиться ими, чтобы это могло помочь кому-то там.
Итак, проблема, с которой я столкнулся, заключается в следующем: мой сайт основан на приложении Django, когда я использую Google Chrome, он интерпретирует его как (насколько я понимаю) 32-разрядный, между тем он 64-разрядный (я не уверен, правильно ли я описываю проблему, но общая идея такова), и Google Chrome выходит из строя и выдает следующее сообщение:
Неправильное заполнение
Что я сделал, чтобы устранить проблему. Решение основано на:https://gist.github.com/perrygeo/ee7c65bb1541ff6ac770
Итак, я углубился в: /usr/local/lib/python3.8/base64.py Имя функции — b64decode, оно находится в строке 87. Это выглядит как:
def b64decode(s, altchars=None, validate=False):
"""Decode the Base64 encoded bytes-like object or ASCII string s.
Optional altchars must be a bytes-like object or ASCII string of length 2
which specifies the alternative alphabet used instead of the ' ' and '/'
characters.
The result is returned as a bytes object. A binascii.Error is raised if
s is incorrectly padded.
If validate is False (the default), characters that are neither in the
normal base-64 alphabet nor the alternative alphabet are discarded prior
to the padding check. If validate is True, these non-alphabet characters
in the input result in a binascii.Error.
"""
s = _bytes_from_decode_data(s)
if altchars is not None:
altchars = _bytes_from_decode_data(altchars)
assert len(altchars) == 2, repr(altchars)
s = s.translate(bytes.maketrans(altchars, b' /'))
if validate and not re.fullmatch(b'[A-Za-z0-9 /]*={0,2}', s):
raise binascii.Error('Non-base64 digit found')
return binascii.a2b_base64(s)
Чтобы устранить проблему, я изменил эту строку:
верните binascii.a2b_base64 (ы)
в это:
верните binascii.a2b_base64(s b’================================’)# исправлено
Может быть слишком много ‘=’, но они исчезнут в любом случае… Но эти знаки равенства позволяют Google Chrome правильно определять base64…
Эта ошибка возникает только с Google Chrome.
Обновить Приведенный выше подход почему-то на самом деле не работает… Он работает на одном компьютере с одним ключом и отключает другой компьютер с другим ключом среды. Таким образом, результат сам по себе не в порядке. Итак, в файле просмотра у меня есть следующий код:
def index(request):
now = datetime.datetime.now()
num_visits=request.session.get('num_visits', 0)
request.session['num_visits']=num_visits 1
context = {
'now':now,
num_visits':num_visits,
}
return render(request, 'index.html', context=context)
Итак, как только я отключаю следующие части кода, предназначенные для подсчета количества сеансов пользователя, все становится нормальным, и у меня нет проблем:
num_visits=request.session.get(‘num_visits’, 0)
запрос.сессия[‘num_visits’]=num_visits 1
num_visits’:num_visits,
Итак, я предполагаю, что эти строки являются источником ошибки «неправильного заполнения»… Но что я сделал с ними не так, можно найти… Любая помощь была бы приятной…