python - Django:导入@wraps时的AppRegistryNotReady
问题描述
使用时收到以下错误wraps
。
File "/Users/Marc/.local/share/virtualenvs/lumis-vJ5Odiz7/lib/python3.6/site-packages/django/conf/__init__.py", line 56, in __getattr__
self._setup(name)
File "/Users/Marc/.local/share/virtualenvs/lumis-vJ5Odiz7/lib/python3.6/site-packages/django/conf/__init__.py", line 43, in _setup
self._wrapped = Settings(settings_module)
File "/Users/Marc/.local/share/virtualenvs/lumis-vJ5Odiz7/lib/python3.6/site-packages/django/conf/__init__.py", line 106, in __init__
mod = importlib.import_module(self.SETTINGS_MODULE)
File "/Users/Marc/.local/share/virtualenvs/lumis-vJ5Odiz7/lib/python3.6/importlib/__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 994, in _gcd_import
File "<frozen importlib._bootstrap>", line 971, in _find_and_load
File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 678, in exec_module
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "/Users/Marc/Desktop/Dev/lumis/config/settings/local_marc.py", line 1, in <module>
from .local import *
File "/Users/Marc/Desktop/Dev/lumis/config/settings/local.py", line 1, in <module>
from .base import *
File "/Users/Marc/Desktop/Dev/lumis/config/settings/base.py", line 6, in <module>
from lumis.core.helpers import get_env_variable
File "/Users/Marc/Desktop/Dev/lumis/lumis/core/helpers.py", line 17, in <module>
from .decorators import check_if_mixpanel_defined_in_settings
File "/Users/Marc/Desktop/Dev/lumis/lumis/core/decorators.py", line 1, in <module>
from django.contrib.auth.views import redirect_to_login
File "/Users/Marc/.local/share/virtualenvs/lumis-vJ5Odiz7/lib/python3.6/site-packages/django/contrib/auth/views.py", line 11, in <module>
from django.contrib.auth.forms import (
File "/Users/Marc/.local/share/virtualenvs/lumis-vJ5Odiz7/lib/python3.6/site-packages/django/contrib/auth/forms.py", line 10, in <module>
from django.contrib.auth.models import User
File "/Users/Marc/.local/share/virtualenvs/lumis-vJ5Odiz7/lib/python3.6/site-packages/django/contrib/auth/models.py", line 2, in <module>
from django.contrib.auth.base_user import AbstractBaseUser, BaseUserManager
File "/Users/Marc/.local/share/virtualenvs/lumis-vJ5Odiz7/lib/python3.6/site-packages/django/contrib/auth/base_user.py", line 47, in <module>
class AbstractBaseUser(models.Model):
File "/Users/Marc/.local/share/virtualenvs/lumis-vJ5Odiz7/lib/python3.6/site-packages/django/db/models/base.py", line 100, in __new__
app_config = apps.get_containing_app_config(module)
File "/Users/Marc/.local/share/virtualenvs/lumis-vJ5Odiz7/lib/python3.6/site-packages/django/apps/registry.py", line 244, in get_containing_app_config
self.check_apps_ready()
File "/Users/Marc/.local/share/virtualenvs/lumis-vJ5Odiz7/lib/python3.6/site-packages/django/apps/registry.py", line 127, in check_apps_ready
raise AppRegistryNotReady("Apps aren't loaded yet.")
django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.
附加装饰器,我正在使用 wraps 函数。
from functools import wraps
def check_if_mixpanel_defined_in_settings(func):
@wraps(func)
def wrapper(*args, **kwargs):
if settings.MIXPANEL_ID:
func(*args, **kwargs)
else:
print("Check for settings.MIXPANEL_ID failed.")
return wrapper
装饰器.py
from django.contrib.auth.views import redirect_to_login
from django.core.exceptions import PermissionDenied
from functools import wraps
from django.conf import settings
def admin_permission_required(view_func):
"""
A view decorator that ensures that the user is logged in
and has access to the organizer in the request.
If the user is not logged in, he will be redirected to
the login page with the matching next parameter.
If the user does not have permission for the organizer
a PermissionDenied exception is raised.
"""
def wrapper(request, *args, **kwargs):
# Make sure that this decorator is only used if the organizer object exists in the request
assert hasattr(request, 'organizer'), (
"The admin_permission_required decorator "
"requires the organizer object in the request."
)
# Check if the user is authenticated
if not request.user.is_authenticated:
return redirect_to_login(request.get_full_path())
# Check if the user belongs to the organizer
if request.organizer.user == request.user:
return view_func(request, *args, **kwargs)
raise PermissionDenied("You don't have permissions for this organizer.")
return wrapper
class AdminPermissionRequiredMixin:
"""
Mixin to use the admin_permission_required decorator in a class-based view.
"""
@classmethod
def as_view(cls, **initkwargs):
view = super().as_view(**initkwargs)
return admin_permission_required(view)
def check_if_mixpanel_defined_in_settings(func):
@wraps(func)
def wrapper(*args, **kwargs):
if settings.MIXPANEL_ID:
func(*args, **kwargs)
else:
print("Check for settings.MIXPANEL_ID failed.")
return wrapper
解决方案
推荐阅读
- java - 无法在 VSCode 中的包之间拖放文件
- docker - docker容器上的多个站点
- websocket - 使用 websockets 连接两个 node.js 服务器(ws 包)(https)
- java - 从 BufferedReader 将值存储在多维数组中
- mysql - 为什么 MySQl 中有左连接和右连接?
- deep-learning - Google Collab 因内存不足而不断崩溃
- python - Panda Rolling Max:为什么我不断收到“无属性”错误
- spring - 管理员 cronJob 用户在 Hybris 中的 Cron 作业失败
- mysql - 如何让触发器返回一个值?
- aws-api-gateway - 我可以在同一个 AWS 账户中创建 API 组或几个 API 网关吗