Python Django导入模块的pythonic方法是什么

时间:2016-01-27 10:20:10

标签: python django python-2.7 import

我正在使用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中的所有常见导入,以免重复代码。

这种方式是否正确?什么是最蟒蛇的方式呢?

1 个答案:

答案 0 :(得分:1)

这是一个基于意见的问题,所以这是我的意见。

使用from package import *语法几乎总是很糟糕。第一个问题是你不知道变量来自哪里:它是在导入文件中定义的,是从另一个文件导入到该文件中的。当你的项目增长时,它很难管理。

你的IDE / linter也不知道这个变量来自哪里。因此,它无法检查未声明的变量,无法正确查找使用情况,您也无法使用重构 - >重命名功能(这是最痛苦的)。

我建议在每个文件中按照它的确切名称导入所有内容。并且不要认为它是代码重复。

我在进口中会改进的两件事是:

  1. 将每个根包导入放在单独的行中:

    import logging
    import re
    import pdb
    
  2. 按以下顺序编写导入(标准库包,第三方包和从包中导入),按字母顺序用空行和订单组分隔。它使阅读更容易:

    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