python - Python(Redis + DRF):类型无效的输入:'NoneType'。先转换为字节、字符串、整数或浮点数
问题描述
我有我的 redis 运行服务器,这是它的配置:
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://TestPass1234@192.168.0.30:6379/1",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient"
},
"KEY_PREFIX": "example"
}
}
CACHE_TTL = 60 * 1 # 1 hour
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
SESSION_CACHE_ALIAS = "default"
这是我的views.py
:
from django.shortcuts import render
from django.utils.decorators import method_decorator
from django.views.decorators.cache import cache_page
from django.views.decorators.vary import vary_on_cookie
from rest_framework.viewsets import ModelViewSet
from .serializers import TestSerializer
from .models import Test
# Create your views here.
class NameofViewSet(ModelViewSet):
serializer_class = TestSerializer
queryset = Test.objects.all()
#lookup_field = 'name_of_lookup_field'
# and more..
@method_decorator(vary_on_cookie)
@method_decorator(cache_page(60*60))
def dispatch(self, *args, **kwargs):
return super(TestSerializer, self).dispatch(*args, **kwargs)
我在数据库中有一个对象,只是为了通过请求 URL 来获取一些东西。
错误 :
[08/Dec/2020 02:17:25] "GET /tests/ HTTP/1.1" 500 158257
Internal Server Error: /tests/
Traceback (most recent call last):
File "C:\Users\dziugas\.virtualenvs\test_cache-PBGnRHhx\lib\site-packages\redis\connection.py", line 643, in on_connect
auth_response = self.read_response()
File "C:\Users\dziugas\.virtualenvs\test_cache-PBGnRHhx\lib\site-packages\redis\connection.py", line 756, in read_response
raise response
redis.exceptions.AuthenticationWrongNumberOfArgsError: wrong number of arguments for 'auth' command
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Users\dziugas\.virtualenvs\test_cache-PBGnRHhx\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
response = get_response(request)
File "C:\Users\dziugas\.virtualenvs\test_cache-PBGnRHhx\lib\site-packages\django\core\handlers\base.py", line 179, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\dziugas\.virtualenvs\test_cache-PBGnRHhx\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
return view_func(*args, **kwargs)
File "C:\Users\dziugas\.virtualenvs\test_cache-PBGnRHhx\lib\site-packages\rest_framework\viewsets.py", line 125, in
view
return self.dispatch(request, *args, **kwargs)
File "C:\Users\dziugas\.virtualenvs\test_cache-PBGnRHhx\lib\site-packages\django\utils\decorators.py", line 43, in _wrapper
return bound_method(*args, **kwargs)
File "C:\Users\dziugas\.virtualenvs\test_cache-PBGnRHhx\lib\site-packages\django\views\decorators\vary.py", line 38, in inner_func
response = func(*args, **kwargs)
File "C:\Users\dziugas\.virtualenvs\test_cache-PBGnRHhx\lib\site-packages\django\utils\decorators.py", line 43, in _wrapper
return bound_method(*args, **kwargs)
File "C:\Users\dziugas\.virtualenvs\test_cache-PBGnRHhx\lib\site-packages\django\utils\decorators.py", line 122, in
_wrapped_view
result = middleware.process_request(request)
File "C:\Users\dziugas\.virtualenvs\test_cache-PBGnRHhx\lib\site-packages\django\middleware\cache.py", line 145, in
process_request
cache_key = get_cache_key(request, self.key_prefix, 'GET', cache=self.cache)
File "C:\Users\dziugas\.virtualenvs\test_cache-PBGnRHhx\lib\site-packages\django\utils\cache.py", line 360, in get_cache_key
headerlist = cache.get(cache_key)
File "C:\Users\dziugas\.virtualenvs\test_cache-PBGnRHhx\lib\site-packages\django_redis\cache.py", line 87, in get
value = self._get(key, default, version, client)
File "C:\Users\dziugas\.virtualenvs\test_cache-PBGnRHhx\lib\site-packages\django_redis\cache.py", line 27, in _decorator
return method(self, *args, **kwargs)
File "C:\Users\dziugas\.virtualenvs\test_cache-PBGnRHhx\lib\site-packages\django_redis\cache.py", line 94, in _get
return self.client.get(key, default=default, version=version, client=client)
File "C:\Users\dziugas\.virtualenvs\test_cache-PBGnRHhx\lib\site-packages\django_redis\client\default.py", line 220, in get
value = client.get(key)
File "C:\Users\dziugas\.virtualenvs\test_cache-PBGnRHhx\lib\site-packages\redis\client.py", line 1606, in get
return self.execute_command('GET', name)
File "C:\Users\dziugas\.virtualenvs\test_cache-PBGnRHhx\lib\site-packages\redis\client.py", line 898, in execute_command
conn = self.connection or pool.get_connection(command_name, **options)
File "C:\Users\dziugas\.virtualenvs\test_cache-PBGnRHhx\lib\site-packages\redis\connection.py", line 1192, in get_connection
connection.connect()
File "C:\Users\dziugas\.virtualenvs\test_cache-PBGnRHhx\lib\site-packages\redis\connection.py", line 567, in connect self.on_connect()
File "C:\Users\dziugas\.virtualenvs\test_cache-PBGnRHhx\lib\site-packages\redis\connection.py", line 649, in on_connect
self.send_command('AUTH', self.password, check_health=False)
File "C:\Users\dziugas\.virtualenvs\test_cache-PBGnRHhx\lib\site-packages\redis\connection.py", line 725, in send_command
self.send_packed_command(self.pack_command(*args),
File "C:\Users\dziugas\.virtualenvs\test_cache-PBGnRHhx\lib\site-packages\redis\connection.py", line 775, in pack_command
for arg in imap(self.encoder.encode, args):
File "C:\Users\dziugas\.virtualenvs\test_cache-PBGnRHhx\lib\site-packages\redis\connection.py", line 119, in encode
raise DataError("Invalid input of type: '%s'. Convert to a "
redis.exceptions.DataError: Invalid input of type: 'NoneType'. Convert to a bytes, string, int or float first.
[08/Dec/2020 02:19:58] "GET /tests/ HTTP/1.1" 500 158257
这是我第一次尝试使用缓存,可能出了什么问题?我在 youtube 上关注本教程,但没有得到与预期相同的结果。如何使用redis?
我的Pipfile
:
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"
[packages]
django = "*"
django-rest-framework = "*"
django-redis = "==4.12.1"
django-redis-cache = "==3.0.0"
redis = "==3.5.3"
[dev-packages]
[requires]
python_version = "3.9"
解决方案
我对 Django 如何为 redis 提供密码有错误的理解,所以我将设置更改为:
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://@192.168.0.30:6379/1",
"OPTIONS": {
"PASSWORD": "TestPass123",
"CLIENT_CLASS": "django_redis.client.DefaultClient"
},
"KEY_PREFIX": "example"
}
}
推荐阅读
- null - 无法确定 R 数据框中的空白、空值、na 或其他任何类型
- reactjs - 通过 refs 访问 phone-react-input-2 组件时,我没有得到更新的状态
- office-js - Outlook 插件 - 需要获取打开/读取 UI 的电子邮件数据
- c++ - cpp 程序在读取 csv 文件时返回核心转储
- r - 在 RMarkdown 块中渲染闪亮
- typescript - 带有动态键的 TypeScript 对象惰性初始化
- python - 使用 pyodbc 连接到 IBM i 的 Db2 时出现问题
- html - Shopify 如何将锚点更改为没有前缀
- microsoft-edge-chromium - Edge Chromium IEMode SiteList 允许重定向选项不起作用
- java - 使用蓝牙打印机在 Android Studio 上打印条码