经典的源码目录结构
- 样式一:强调模块化设计
requirements文件夹:列出项目中需要的依赖文件,比如项目中使用的所有的python包。
apps、libs文件夹:分离应用文件和库文件
settings模块
优势:模块化设计适合规模大的项目
劣势:没有说明static文件的放置路径
$ tree .
.
├── djangolicious
│ ├── apps
│ │ ├── blog
│ │ │ ├── __init__.py
│ │ │ ├── models.py
│ │ │ ├── tests.py
│ │ │ └── views.py
│ │ ├── __init__.py
│ │ ├── news
│ │ │ ├── __init__.py
│ │ │ ├── models.py
│ │ │ ├── tests.py
│ │ │ └── views.py
│ │ └── reader
│ │ ├── __init__.py
│ │ ├── models.py
│ │ ├── tests.py
│ │ └── views.py
│ ├── __init__.py
│ ├── libs
│ │ ├── display
│ │ │ ├── __init__.py
│ │ │ ├── models.py
│ │ │ ├── tests.py
│ │ │ └── views.py
│ │ ├── __init__.py
│ │ └── management
│ │ ├── __init__.py
│ │ ├── models.py
│ │ ├── tests.py
│ │ └── views.py
│ ├── settings
│ │ ├── common.py
│ │ ├── dev.py
│ │ ├── __init__.py
│ │ ├── prod.py
│ │ └── test.py
│ ├── urls.py
│ └── wsgi.py
├── manage.py
├── requirements
│ ├── common.txt
│ ├── dev.txt
│ ├── prod.txt
│ └── test.txt
└── requirements.txt
directories, 36 files
- 样式二:大型开源的Django框架项目的
PROJ_NAME/
__init__.py 这几个文件是django创建project所必须的,不做过多说明
manage.py
settings.py
urls.py
apps/ 即使是“小”工程,也建议分成多个app,每个app足够简单,只解决某一个方面的问题 (注1)
myapp1/
tests.py
models.py
templates/
templatetags/
myapp2/
extra_apps/ 引用的其他app。
libs/ 加载第三方模块,可以避免版本冲突,按照标准的site-packages管理(注2)
python*.*/ 指定python版本号
site-packages/
requirements.pip #pip的依赖说明文件
tests/ project级别的测试,对于每个app,还要有自己的测试代码
static/ 静态内容
css/
js/
images/
uploads/ 上传文件所在目录
templates/ 模板目录,覆盖app的模板
flatpages/
comments/
example/
app1/
app2/
templatetags/ tag目录
注1:需要指定static、templates的路径,在在settings.py中设置: ![]() ‘APP_DIRS’: False,设置为False后,则不会再去app下查找,而是根据DIRS中的路径去进行查找.。 ![]() |
我的Django目录
移动之后,还不可以直接使用。需要再改写东西才行。主要修改是的import引用的路径。例如之前的:
from blog.models import Blog
改成如下:
from apps_project.blog.models import Blog
就是把之前所有app的应用加上apps_projet:
除了该这个地方之后,也不要忘记修改urls.py文件和settings.py文件的应用,同样在前面加上apps_project,如:blog应用的urls.py、settings.py 原本的INSTALLED_APPS设置:可以修改成如下:
#coding:utf-8
from django.conf.urls import include, url
urlpatterns = [
url(r'^$', 'apps_project.blog.views.index', name='blog_list'),
url(r'^(?P<id>\d+)$', 'apps_project.blog.views.blog_show', name='detailblog'),
#...
]
INSTALLED_APPS = (
'apps_project.blog',
#...其他应用
)
注1:若在setting中的staticfiles_dirs中加入apps_projects配置: os.path.join(BASE_DIR, ‘apps_project’)) 就可以直接用:from blog.models import Blog
django配置静态文件
配置静态文件的两种方式:
- 配置单独app下的静态文件,比如某个app下的单独的图片
- 配置整个project下的静态文件,适用于那些和单独app关联不大的文件,比如jquery bootstrap 等等
配置步骤:
-
首先,我们需要确认在settings.py文件中的INSTALLED_APPS变量中存在 django.contrib.staticfiles
INSTALLED_APPS = ( 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', )
-
如果我们要配置单独app下的静态文件的话,执行此步骤。
在settings.py文件中定义 STATIC_URL 变量。
STATIC_URL = ‘/static/’ -
如果我们要配置整个project下的静态文件的话,执行此步骤。
在settings.py文件中定义 STATICFILES_DIRS 变量。STATICFILES_DIRS = ( os.path.join(BASE_DIR, "static"), # 首选project静态文件搜寻路径 '/var/www/static/', # 第二选project静态文件搜寻路径,还可以有第三选,第四选…… )
-
如果我们要配置整个project下的静态文件的话,执行此步骤。我们需要在整个project 中建立一个 名为static的文件夹
-
当我们在模板中无论是使用硬链接 /static/myexample.jpg 还是使用 static 标签 <img src="{% static “myexample.jpg” %}" /> 都会先访问app下的static/文件夹下的myexample.jpg 文件,若app下的static文件夹中没有该文件,则访问project中的static/文件夹,查看是否有myexample.jpg文件,若有则返回,若没有则去/var/www/static/中寻找。
-
注:静态文件的设置需要看BASE_DIR的值来具体根据上述方法来设置。
第三方应用本地化
创建一个package叫apps_third_party。
从python系统目录中找到django_comments整个应用的文件夹。一般在python安装目录下的lib/site-packages/django_contrib_comments-1.7.0.dev1-py2.7.egg中(1.7是django_comments版本号,py2.7是python版本号)
接下来同样需要修改一下django_comments的引用路径。修改之后统计,一共有4种地方需要修改:
1)from django_comments. 全部替换成 from apps_third_party.django_comments.
2)import django_commments 全部替换成 from apps_third_party import django_comments
3)urls设置include(‘django_comments.urls’) 改成 include(‘apps_third_party.django_comments.urls’)
4)settings.py引用 django_comments 改成 apps_third_party.django_comments
settings.py 的简单优化
主要是针对INSTALLED_APPS设置。现在设置如下:
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.sites',
'apps_third_party.django_comments',
'apps_project.blog',
'apps_project.tools',
'apps_project.tutorial',
'apps_project.user_ex',
'apps_project.oauth',
'apps_project.view_record',
)
比较多,不清晰明了,现改成:
#先决应用
PREREQ_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.sites',
]
#项目应用
PROJECT_APPS = [
'apps_project.blog',
'apps_project.tools',
'apps_project.tutorial',
'apps_project.user_ex',
'apps_project.oauth',
'apps_project.view_record',
]
#第三方应用
THIRD_PARTY_APPS = [
'apps_third_party.django_comments',
]
INSTALLED_APPS = PREREQ_APPS + PROJECT_APPS + THIRD_PARTY_APPS
参考文章
https://www.cnblogs.com/codemyzen/p/3678787.html
http://yshblog.com/blog/65
https://www.cnblogs.com/MnCu8261/p/6013557.html