亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

binascii.Error:python django 中的填充不正確

binascii.Error:python django 中的填充不正確

汪汪一只貓 2023-06-13 15:33:12
我正在嘗試將 base64 編碼的圖像保存在 django rest 框架中。首先,我們做一個代碼,將base64編碼后的圖片插入到imagefield中進行測試,出現如下錯誤。binascii.Error:填充不正確我不明白的是,我之前使用過相同的代碼并沒有出現這樣的錯誤。你能幫助我嗎?這是我的代碼。serializers.pyfrom rest_framework import serializersfrom .models import post, commentclass Base64ImageField (serializers.ImageField) :    def to_internal_value (self, data) :        from django.core.files.base import ContentFile        import base64        import six        import uuid        if isinstance(data, six.string_types):            if 'data:' in data and ';base64,' in data :                header, data = data.split(';base64,')            try :                decoded_file = base64.b64decode(data)            except TypeError :                self.fail('invalid_image')            file_name = str(uuid.uuid4())[:12]            file_extension = self.get_file_extension(file_name, decoded_file)            complete_file_name = "%s.%s" % (file_name, file_extension, )            data = ContentFile(decoded_file, name=complete_file_name)        return super(Base64ImageField, self).to_internal_value(data)    def get_file_extension (self, file_name, decoded_file) :        import imghdr        extension = imghdr.what(file_name, decoded_file)        extension = "jpg" if extension == "jpeg" else extension        return extensionclass commentSerializer (serializers.ModelSerializer) :    class Meta :        model = comment        fields = '__all__'class postSerializer (serializers.ModelSerializer) :    author = serializers.CharField(source='author.username', read_only=True)    image1 = Base64ImageField(use_url=True)    image2 = Base64ImageField(use_url=True)    image3 = Base64ImageField(use_url=True)    image4 = Base64ImageField(use_url=True)    image5 = Base64ImageField(use_url=True)    comment = commentSerializer(many=True, read_only=True)    class Meta:        model = post        fields = ['pk', 'author', 'title', 'text', 'image1', 'image2', 'image3', 'image4', 'image5', 'tag1', 'tag2', 'tag3', 'tag4', 'tag5', 'comment']
查看完整描述

5 回答

?
梵蒂岡之花

TA貢獻1900條經驗 獲得超5個贊

我不確定這是否適用于您的情況,具體取決于您存儲編碼數據的位置。

我有同樣的錯誤,但它與一些編碼的會話數據有關。我清除了瀏覽器 Devtools 中的會話數據(cookie、緩存等),它解決了我的問題。

只是張貼它以防它適用或幫助其他出于同樣原因而來的人。


查看完整回答
反對 回復 2023-06-13
?
交互式愛情

TA貢獻1712條經驗 獲得超3個贊

在 shell 中運行以下命令

from?django.contrib.sessions.models?import?Session
Session.objects.all().delete()
查看完整回答
反對 回復 2023-06-13
?
慕森卡

TA貢獻1806條經驗 獲得超8個贊

我有同樣的錯誤。我做了所有清除緩存的事情,但它不起作用?,F在將瀏覽器更改為 Mozilla?,F在它正在工作。



查看完整回答
反對 回復 2023-06-13
?
MM們

TA貢獻1886條經驗 獲得超2個贊

我遇到過同樣的問題。我猜這是因為我一開始使用的是 django 4.0.1,后來切換回 django 2.2...(也許你的問題不是由此引起的,但我只是想提供一些關于問題可能出在哪里的想法遇到此問題的讀者請訪問此頁面。)

session_dataDjango 4.0.1 應該直接將字符串中的會話數據保存到數據庫中,但是 Django 2.2 將 base64 編碼的數據保存到數據庫表的同一列中/從中讀取django_session。

在我的例子中,base64.b64decode() 中失敗的字符串是.eJxVjEEOwiAQRe_C2pABCgWX7j0DmRlAqoYmpV0Z765NutDtf-_9l4i4rTVuPS9xSuIslDj9boT8yG0H6Y7tNkue27pMJHdFHrTL65zy83K4fwcVe_3WGtkEHfLg2IMroL1VZA0BFGMJPJhRkdEucypY2CfA7C2HgRHGor14fwDNWjfC:1nERxl:5jJRHXpQH7aZrf2-C99MnTIWARd_cUag76Xa2YjW1yw,這顯然不是有效的 base64 字符串,因為: - . .base64 字符列表中根本不存在符號。

http://img1.sycdn.imooc.com//64881bea000120b919090621.jpg

我的完整回溯信息是:


Internal Server Error: /admin

Traceback (most recent call last):

  File "C:\Users\Public\django2.2\lib\site-packages\django\contrib\sessions\backends\base.py", line 189, in _get_session

    return self._session_cache

AttributeError: 'SessionStore' object has no attribute '_session_cache'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):

  File "C:\Users\Public\django2.2\lib\site-packages\django\core\handlers\exception.py", line 34, in inner

    response = get_response(request)

  File "C:\Users\Public\django2.2\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response

    response = self.process_exception_by_middleware(e, request)

  File "C:\Users\Public\django2.2\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response

    response = wrapped_callback(request, *callback_args, **callback_kwargs)

  File "C:\Users\Public\django2.2\lib\site-packages\django\contrib\admin\sites.py", line 241, in wrapper

    return self.admin_view(view, cacheable)(*args, **kwargs)

  File "C:\Users\Public\django2.2\lib\site-packages\django\utils\decorators.py", line 142, in _wrapped_view

    response = view_func(request, *args, **kwargs)

  File "C:\Users\Public\django2.2\lib\site-packages\django\views\decorators\cache.py", line 44, in _wrapped_view_func

    response = view_func(request, *args, **kwargs)

  File "C:\Users\Public\django2.2\lib\site-packages\django\contrib\admin\sites.py", line 212, in inner

    if not self.has_permission(request):

  File "C:\Users\Public\django2.2\lib\site-packages\django\contrib\admin\sites.py", line 186, in has_permission

    return request.user.is_active and request.user.is_staff

  File "C:\Users\Public\django2.2\lib\site-packages\django\utils\functional.py", line 256, in inner

    self._setup()

  File "C:\Users\Public\django2.2\lib\site-packages\django\utils\functional.py", line 392, in _setup

    self._wrapped = self._setupfunc()

  File "C:\Users\Public\django2.2\lib\site-packages\django\contrib\auth\middleware.py", line 24, in <lambda>

    request.user = SimpleLazyObject(lambda: get_user(request))

  File "C:\Users\Public\django2.2\lib\site-packages\django\contrib\auth\middleware.py", line 12, in get_user

    request._cached_user = auth.get_user(request)

  File "C:\Users\Public\django2.2\lib\site-packages\django\contrib\auth\__init__.py", line 182, in get_user

    user_id = _get_user_session_key(request)

  File "C:\Users\Public\django2.2\lib\site-packages\django\contrib\auth\__init__.py", line 59, in _get_user_session_key

    return get_user_model()._meta.pk.to_python(request.session[SESSION_KEY])

  File "C:\Users\Public\django2.2\lib\site-packages\django\contrib\sessions\backends\base.py", line 54, in __getitem__

    return self._session[key]

  File "C:\Users\Public\django2.2\lib\site-packages\django\contrib\sessions\backends\base.py", line 194, in _get_session

    self._session_cache = self.load()

  File "C:\Users\Public\django2.2\lib\site-packages\django\contrib\sessions\backends\db.py", line 44, in load

    return self.decode(s.session_data) if s else {}

  File "C:\Users\Public\django2.2\lib\site-packages\django\contrib\sessions\backends\base.py", line 100, in decode

    encoded_data = base64.b64decode(session_data.encode('ascii'))


查看完整回答
反對 回復 2023-06-13
?
慕桂英546537

TA貢獻1848條經驗 獲得超10個贊

您可能在不同的環境中運行服務器,激活該環境并嘗試再次運行服務器。

如果 env 文件夾在您當前的路徑中,請執行以下操作

殺死服務器然后運行

source env/bin/activate
python manage.py runserver


查看完整回答
反對 回復 2023-06-13
  • 5 回答
  • 0 關注
  • 218 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號