在将带有Django 1.1.11的python2项目移植到Python3.7和Django 2.2.5时,我在依赖项中遇到了错误。
我在python2中使用Django-mobileesp,当我将代码更新到python3时,它会给出UserAgent中间件的错误。
线程django主线程中的异常:回溯(最近一次调用):文件“/usr/lib/python3.7/threading.py”,第917行,在“bootstrap”内部self.run()文件“/usr/lib/python3.7/threading.py”,第865行,在运行self.\u target(*self.\u args,**self.\u kwargs)文件“/home/jarvis/Desktop/law3/lib/python3.7/site packages/django/utils/autoreload.py”,第54行,在包装器fn(*args,**kwargs)文件“/home/jarvis/Desktop/law3/lib/python3.7/site packages/django/core/management/commands/runserver.py”中,第137行,在内部运行处理程序=self.get_处理程序(*args,**选项)文件“/home/jarvis/Desktop/law3/lib/python3.7/site packages/django/contrib/staticfiles/management/commands/runserver.py”,第27行,在get_handler=super().get_handler(*args,**选项)文件“/home/jarvis/Desktop/law3/lib/python3.7/site packages/django/core/management/commands/runserver.py”第64行中,在get_handler返回get_内部_wsgi_应用程序()文件“/home/jarvis/Desktop/law3/lib/python3.7/site packages/django/core/servers/basehttp.py”第45行中,在get_internal_wsgi_应用程序return import_string(app_path)文件“/home/jarvis/Desktop/law3/lib/python3.7/site packages/django/utils/module_load.py”的第17行,在import_string module=import_module(module_path)文件“/home/jarvis/Desktop/law3/lib/python3.7/importlib/init.py”的第127行,在import_模块return引导程序中[级别:,包,级别)文件“”,第1006行,在“gcd导入文件”中,第983行,在“查找并加载文件”中,第967行,在“查找并加载未锁定文件”中,第677行,在“加载未锁定文件”中,第728行,在“执行模块文件”中,第219行,在“调用已删除框架的文件”中“/home/jarvis/Desktop/law3/src/laversify/wsgi.py”,第5行,在application=get_wsgi_application()文件“/home/jarvis/Desktop/law3/lib/python3.7/site packages/django/core/wsgi.py”中,第13行,在get_wsgi_应用程序返回WSGIHandler()文件“/home/jarvis/Desktop/law3/lib/python3.7/site packages/django/core/handlers/wsgi.py”中,第135行,在init self.load_中间件()文件中“/home/jarvis/Desktop/law3/lib/python3.7/site packages/django/core/handlers/base.py”,第37行,在load\u middleware mw\u instance=middleware(handler)TypeError:UserAgentDetectionMiddleware()中不带参数
settings.py
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'corsheaders.middleware.CorsMiddleware',
'django_mobileesp.middleware.UserAgentDetectionMiddleware'
]
#middleware.py#
from django.conf import settings
from django.utils.functional import SimpleLazyObject
DETECT_USER_AGENTS = getattr(settings, 'DETECT_USER_AGENTS', {})
def lazy_detection(request, key):
detector = DETECT_USER_AGENTS[key]
return SimpleLazyObject( lambda: detector(request) )
class UserAgentDetectionMiddleware(object):
"""
Middleware to detect request's user agent
"""
def process_request(self, request):
for each in DETECT_USER_AGENTS:
setattr( request, each, lazy_detection(request, each) )
这不是Python版本问题,而是Django版本问题。Django 2.0中删除了旧的(Django 1.10之前的)中间件处理方式以及MIDDLEWARE_CLASSES设置。请参阅有关如何使中间件与新的中间件结构兼容的文档。
我一直在将Django项目移植到Python 3和Django 2。我不得不按照Django 2中的要求使用外键向所有模型添加on_delete。现在我已经尝试为这些更改进行迁移,得到。 它引用的文件是0002迁移文件,而不是已更新的模型文件。我不知道该如何解决这个问题。我曾经尝试过伪造迁移,但仍然会遇到同样的错误。 我不知道为什么它认为数据库不存在,我已经检查过了,一切都完好无损,并且在Post
问题内容: 我一直在玩s。我想要实现的是一种执行以下操作的方法: 我试图能够将列表中的项目向上移动,除非它已经位于顶部,在这种情况下它将保持不变。例如,如果项目3被移动,则列表将为: 从目前的了解来看,我想要一些类似的东西: 我苦苦挣扎的部分是“向上移动”部分。任何有关如何实现的技巧或代码示例都将受到赞赏。 问题答案: 我在寻找答案时遇到了这个老问题,我以为我会发布找到的解决方案,以防其他人经过这
为了更好地为移动设备服务,HTML 5推出了一系列针对移动设备的API。 Viewport Geolocation API getCurrentPosition方法 watchPosition方法和clearWatch方法 Vibration API Luminosity API Orientation API 参考链接 Viewport Viewport指的是网页的显示区域,也就是不借助滚动条的
" Life is pleasant. Death is peaceful. It’s the transition that’s troublesome. " — Isaac Asimov (attributed) 概述 几乎所有的Python 2程序都需要一些修改才能正常地运行在Python 3的环境下。为了简化这个转换过程,Python 3自带了一个叫做2to3的实用脚本(Utility S
" Words, words. They’re all we have to go on. " — Rosencrantz and Guildenstern are Dead 概述 未知的或者不正确的字符编码是因特网上无效数据(gibberish text)的头号起因。在第3章,我们讨论过字符编码的历史,还有Unicode的产生,“一个能处理所有情况的大块头。”如果在网络上不再存在乱码这回事,我会
问题内容: 在Python中,如何将项目移至列表中的确定索引? 问题答案: 使用列表的方法: 另外,您可以使用切片符号: 如果要将列表中已存在的项目移动到指定位置,则必须将其删除并将其插入新位置: