在Django的系统检查框架的文档中,它说:
检查应该在加载应用程序时加载的文件中注册; 例如,在该
AppConfig.ready()方法中.
该页面上或该AppConfig.ready()方法周围的示例都没有显示如何执行此操作.给出一个检查方法,如:
from django.core.checks import register, Tags
@register(Tags.compatibility)
def my_check(app_configs, **kwargs):
# ... perform compatibility checks and collect errors
return errors
Run Code Online (Sandbox Code Playgroud)
你会如何在AppConfig.ready()方法中执行此操作?是从另一个叫来的吗?上面的方法应该进入哪个文件?你添加@register(...)的ready()方法?
Phi*_*ord 12
通过阅读本页中有关Apps Registry和System Checks Framework 的示例,似乎(至少)有两种方法可以添加您自己的系统检查.要调整该页面的示例(假设您正在创建一个名为的应用程序myapp):
1)创建一个myapp/checks.py这样的文件:
from django.apps import apps as camelot_apps
from django.core.checks import register, Warning
from django.core.checks import Tags as DjangoTags
class Tags(DjangoTags):
"""Do this if none of the existing tags work for you:
https://docs.djangoproject.com/en/1.8/ref/checks/#builtin-tags
"""
my_new_tag = 'my_new_tag'
@register(Tags.my_new_tag)
def check_taggit_is_installed(app_configs=None, **kwargs):
"Check that django-taggit is installed when usying myapp."
errors = []
try:
from taggit import models
except ImportError:
errors.append(
Warning(
"The django-taggit app is required to use myapp.",
hint=("Install django-taggit"),
# A unique ID so it's easier to find this warning:
id='myapp.W001',
)
)
return errors
Run Code Online (Sandbox Code Playgroud)
然后在myapp/__init__.py(如果它不存在则创建它):
from . import checks
Run Code Online (Sandbox Code Playgroud)
运行此应运行上面的检查:
$ ./manage.py check myapp
Run Code Online (Sandbox Code Playgroud)
2)或者,正如我在初始问题中所想的那样,您可以在AppConfig中注册该检查.所以,保留上面的代码myapp/check.py,但删除该@register(Tags.my_new_tag)行.
然后创建myapp/apps.py包含这个:
from django.core.checks import register
from .checks import Tags, check_taggit_is_installed
class MyappConfig(AppConfig):
name = 'myapp'
def ready(self):
super(MyappConfig, self).ready()
register(Tags.my_new_tag)(check_taggit_is_installed)
Run Code Online (Sandbox Code Playgroud)
并改变myapps/__init__.py它包含这个:
from . import checks
default_app_config = 'myapp.apps.MyappConfig'
Run Code Online (Sandbox Code Playgroud)
第一个示例似乎更简单,不需要自定义AppConfig.
Wto*_*wer 11
检查应该在加载应用程序时加载的文件中注册; 例如,在该
AppConfig.ready()方法中.
因此,将检查代码放在checks.py文件中.然后简单地说apps.py,就像信号一样:
from django.apps import AppConfig
class MyAppConfig(AppConfig):
name = 'MyApp'
verbose_name = "My App"
def ready(self):
# import myapp.signals
import myapp.checks
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1774 次 |
| 最近记录: |