2015-12-05 1 views
0

Я использую python 3.4 и django-1.9. ı требуется int для строки и кодировки с base64.int для строки с кодировкой base64 на python 3.x и django-1.9

код:

new_key = base64.b64encode(str(key)) 

ошибка:

Traceback (most recent call last): 
    File "/home/mehmet/Envs/ets-3/lib/python3.4/site-packages/django/core/handlers/base.py", line 149, in get_response 
    response = self.process_exception_by_middleware(e, request) 
    File "/home/mehmet/Envs/ets-3/lib/python3.4/site-packages/django/core/handlers/base.py", line 147, in get_response 
    response = wrapped_callback(request, *callback_args, **callback_kwargs) 
    File "/home/mehmet/Envs/ets-3/lib/python3.4/site-packages/django/views/decorators/csrf.py", line 58, in wrapped_view 
    return view_func(*args, **kwargs) 
    File "/home/mehmet/Envs/ets-3/lib/python3.4/site-packages/django/contrib/auth/decorators.py", line 23, in _wrapped_view 
    return view_func(request, *args, **kwargs) 
    File "/home/mehmet/PycharmProjects/Tango/orders/views.py", line 167, in order_info 
    subscribe_item_list, mount_subscribe_discount_relation) 
    File "/usr/lib/python3.4/contextlib.py", line 30, in inner 
    return func(*args, **kwds) 
    File "/home/mehmet/PycharmProjects/Tango/operations/order.py", line 94, in new_order 
    return encryption(order.id) 
    File "/home/mehmet/PycharmProjects/Tango/operations/order.py", line 15, in encryption 
    new_key = base64.b64encode(str(key)) 
    File "/home/mehmet/Envs/ets-3/lib/python3.4/base64.py", line 62, in b64encode 
    encoded = binascii.b2a_base64(s)[:-1] 
TypeError: 'str' does not support the buffer interface 

ответ

1

В Python 3 base64.b64encode требует bytes объекта в качестве аргумента, а не str, как это делается в настоящее время. Вы можете справиться с этим путем преобразования целого числа в key на строку байт, а затем base64, кодирующие байты строку:

>>> key = 123456789 
>>> new_key = base64.b64encode(bytes(str(key), encoding='ascii')) 
>>> print(new_key) 
b'MTIzNDU2Nzg5' 
>>> key = -443322 
>>> new_key = base64.b64encode(bytes(str(key), encoding='ascii')) 
>>> print(new_key) 
b'LTQ0MzMyMg==' 

Здесь целое число key сначала преобразуется в 3 строку Python (типа str), а затем превращаете в байтовая строка (тип bytes) с использованием кодировки ASCII. Любая допустимая кодировка может использоваться, но ASCII, безусловно, будет охватывать все возможные цифры и унарные -.

Для полноты в Python 2, вы можете просто сделать это:

>>> key = 123456789 
>>> new_key = str(key).encode('base64')