我正在使用Django,Django rest_framework构建我的apis。我的目录结构如下所示
|-user_directory\
|-__init__.py
|-models\
|-__init__.py
|-contact.py
|-views\
|-__init__.py
|-contact.py
|-myproject
当我写我的观点时,有很多导入,所以我把它们移到我的__init__.py.
目前我的导入看起来像这样
档案user_directory/__init__.py
import logging, re, pdb
logger = logging.getLogger("user_directory")
档案user_directory/views/__init__.py
from django.http import JsonResponse
from rest_framework.decorators import api_view, authentication_classes, permission_classes
from rest_framework import status as rest_status
from rest_framework.response import Response
from lib.request_utils import validate_request, CustomTokenAuthentication
from rest_framework.permissions import IsAuthenticated
from user_directory import *
档案user_directory/views/contact.py
from user_directory.views import *
from user_directory.models.contact import Contact
现在我在许多地方读过这样的事情from package import *
在python中被认为是一种不好的做法。我正在编写views/__init__.py
中的所有常见导入,以免重复代码。
这种方式是否正确?什么是最蟒蛇的方式呢?
答案 0 :(得分:1)
这是一个基于意见的问题,所以这是我的意见。
使用from package import *
语法几乎总是很糟糕。第一个问题是你不知道变量来自哪里:它是在导入文件中定义的,是从另一个文件导入到该文件中的。当你的项目增长时,它很难管理。
你的IDE / linter也不知道这个变量来自哪里。因此,它无法检查未声明的变量,无法正确查找使用情况,您也无法使用重构 - >重命名功能(这是最痛苦的)。
我建议在每个文件中按照它的确切名称导入所有内容。并且不要认为它是代码重复。
我在进口中会改进的两件事是:
将每个根包导入放在单独的行中:
import logging
import re
import pdb
按以下顺序编写导入(标准库包,第三方包和从包中导入),按字母顺序用空行和订单组分隔。它使阅读更容易:
from django.http import JsonResponse
from rest_framework import status as rest_status
from rest_framework.decorators import api_view, authentication_classes, permission_classes
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response
from lib.request_utils import validate_request, CustomTokenAuthentication