Django也用了一段时间了,写了两三个小网站,但是始终感觉自己写出来的站点目录和功能的安排还是比较混乱,很难达到让自己满意的效果,更不要说令人赏心悦目了。尤其是,当你需要开发下一个网站的时候,虽然感觉用户部分的功能(注册/登录/忘记密码/修改用户信息)所有的网站是通用的,但是想复用现有网站的这个功能却相当困难,居然笨到只能把模板文件/Model/View挨个复制过去再修改,实在是难登大雅之堂。
于是狠命的研究了一些文章,终于算是找到了点前人的经验之谈,大概的总结如下:
项目文件manage.py/urls.py/settings.py尽量少的改动(当然,不改动也是不可能的),setting.py里面需要设置数据库的相关信息,还有模板目录之类的,模板目录是可以使用相对目录的(使用os.path),很可惜,我没有测试成功,在lighttpd下面它仍然使用相对目录来搜索模板,所以总是报错,但是我找到了另一种解决方案。
setting.py里面有一个配置选项TEMPLATE_LOADERS。默认情况下它使用两种加载机制,第一种是文件系统方式,即使用下面配置的TEMPLATE_DIRS目录,在里面寻找模板文件,如果没有找到,第二种是app模式,它会在INSTALLED_APPS所标识的已安装的App下面寻找templates目录,并在其中寻找模板文件。而这个第二种,跟TEMPLATE_DIRS是无关的。因此,只要注释掉第一行,TEMPLATE_DIRS这个选项就可以留空了。然后,在任意一个App目录下面建一个templates目录,把模板文件扔进去就OK了。当然,最佳方案是,每个Apps下面放它自己用到的模板文件。这样,以后将这个App放进其它的项目的时候,你不需要做任何设置,模板这一块就已经正常工作了。
然后是Urls,在每个App下面添加它自己的urls.py文件,在里面设定它所用到的url映射,然后在项目级的urls.py里面使用include方式加载各个App的url配置就可以了。但是这样有一个要求,就是这个App要使用统一的目录前缀,比如用户相关的Url都以user/开头。(我不知道是不是必须这样,但是目前我所掌握的知识,只能这样了。)
通过这两个改动,已经将App和项目的耦合性降到了最低,现在如果要重用一个App,比如用户部分,只要把user目录拷到另一个项目,在settings中安装这个App,在urls.py中include这个App的urls,就OK了。至少里面所有的功能都是正常可用的。(当然,模板文件可能需要针对新的项目做些改动,但是如果你的模板设计规则是相同的,那么只要在新项目的framework里使用相同的内容,而使用另一种不同的style文件就可以了。)
花了不少时间把理财易的代码整理了一遍,整理了一下功能的组织,把用户部分/留言板/日记本/投票以及站内信/好友/圈子(这三个功能在理财易中没有开放)全部建成单独的App,并分离了Urls和模板,虽然导致项目目录下面的子目录多了很多,但是每个目录的功能都简单明白了很多,可以很方便的添加或者移除某个App,比如圈子或者站内信,只要在配置文件中安装该App,相应的页面上添加链接,该功能就变得马上可用了。
最基本的理论就是这样,剩下还有一些高级技巧,比如:
每个App下面都可以建一个叫sql的目录,里面建立对应于model名称的sql文件,那么,在执行了syncdb命令安装该App以后,这个SQL文件就会被自动调用,可以用来往分类表里插入系统默认的分类,或者往用户表里插入一条最高权限的初始用户等等。
每个App下面都可以建一个叫templatetags的目录,在里面添加template tags和filters,大家互不干扰。
每个App下面都可以建一个叫tests的子目录,里面放一些单元测试的代码,就可以直接对该App进行单元测试。
每个App下面都可以建一个叫management.py的文件,里面可以放任意的Python函数,并给该函数添加事件接口声明,比如dispatcher.connect(my_syncdb_func, signal=signals.post_syncdb),这样就可以在App安装完成的时候执行任意的功能。(注意,是在添加了任何一个App以后都会被调用到,而不止是自己被安装以后。)
还有,每个App下面的views.py不是必须的,你可以按照自己的需求把函数拆解到多个python文件中,只要在urls.py中引用了正确的类名就可以了。这对于一个功能比较多的App是相当有用的。
有了这些属性的帮忙,基本上你可以对自己的项目文件做出各种适合自己的调整,并且仍然保持项目结构的优雅,并且,对于程序的执行效能是完全没有影响的。
分享到:
相关推荐
《Django最佳实践》(Two Scoops of Django 1.11)是一本专注于最新发布的Django框架1.11版本的最佳实践指南。这本书之所以成为Django开发者必须读的资料,是因为它不仅深入剖析了Django的内部机制,而且还提供了...
"django最佳实践 html"的主题涵盖了如何建立一个高效的Django项目结构,以及遵循的流行标准和规范。下面将详细讨论这些关键知识点。 1. **项目结构**: Django项目通常采用层次清晰的目录结构。一个标准的项目可能...
在本项目中,"Python-Django材料管理系统实践"是一个基于Python的Django框架构建的内容管理系统(CMS),专门针对材料管理需求。这个系统包含了材料文件的导入、材料的出入库跟踪以及用户登录等核心功能,旨在提供一...
【django学生信息管理系统】是一个基于Python的Django框架构建的应用程序,主要用于管理和处理学生的相关信息。Django是一个高级的Web开发框架,它强调可重用性和“开箱即用”的功能,使得开发者能够快速构建安全、...
4. Django模板系统:系统性介绍了Django模板的基础使用方法,包括模板继承、模板标签和过滤器的运用,以及如何在视图中使用模板。 5. Django模型的高级用法:详细阐述了如何在Django中定义和操作模型,包括数据库...
Django的数据库抽象层提供了数据库迁移工具,使得数据库结构的变更可以在多个环境中无缝同步,避免了手动迁移的繁琐工作。 6. **国际化和本地化** Django支持多语言应用,提供了翻译工具和机制,可以轻松地实现...
- **从0开发一个Django博客系统.ppt**:这份PPT可能详细介绍了从无到有构建一个基于Django的博客系统的过程,涵盖了模型设计、视图实现、模板创建、URL配置以及数据库操作等方面。 - **02-其他资料**:可能包含了...
轻量级Django的概念指的是在保持Django核心优势的同时,通过优化和精简,使其更加适合小型或中型项目,降低系统资源的占用,提高运行效率。 一、Django框架基础 1. **MVT架构**:Django遵循Model-View-Template...
路由系统是Django中不可忽视的一部分,书中会教你如何设置URL模式,实现URL与视图的映射。表单处理也是Web开发中的常见任务,Django提供了强大的表单模块,让开发者能够轻松地创建、验证和渲染表单。数据库查询是...
接下来,【创建项目】章节将介绍如何启动一个新的Django项目,这包括使用`django-admin startproject`命令创建项目结构,以及理解Django项目目录的布局。读者将学习如何运行开发服务器,初步体验Django项目的运行。 ...
Django提供了丰富的模板语言,支持变量替换、条件判断、循环等语法结构,使得开发者可以轻松地构建复杂多变的前端界面。 ### 五、与数据库打交道:数据建模 第五章讲述了如何使用Django的ORM(对象关系映射)来...
【标题】基于 Django 编写的图书管理系统源码 在IT领域,Django是一个非常流行的Python Web...同时,这也是一个实践Django最佳实践的好机会,比如遵守DRY(Don't Repeat Yourself)原则,确保代码的可读性和可维护性。
- **起步指南**:这部分是新手入门必备的教程,指导用户从零开始安装和配置 Django,并通过一个简单的示例应用程序来了解 Django 的基本结构和功能。 - **模型层**:解释了如何定义数据模型以及 Django ORM(对象...
在这个过程中,学习者会接触到Django的项目结构、视图、模型、模板等核心概念。 随着学习的深入,文档会逐步讲解如何编写可重用的程序、如何为Django编写补丁以及如何进行高级配置。在编写可重用程序的部分,文档会...
Python基于Django+Simpleui矿山网页管理系统源码是一个利用Python的Web框架Django和前端UI库Simpleui构建的管理系统。这个系统旨在为矿山行业的数据管理提供一个便捷、高效的平台。以下将详细介绍该系统的相关知识点...
1. **Django项目结构**:理解Django项目的标准布局,包括`manage.py`、`settings.py`、`urls.py`、`wsgi.py`等关键文件的作用。 2. **模型设计**:通过分析`models.py`,学习如何定义数据模型,如何使用字段类型、...
学习Django时,了解最佳实践至关重要,例如如何组织项目结构、如何编写单元测试、如何优化性能以及如何处理并发和安全性问题。 这个资源包可能包含了这些概念的详细教程、示例代码、实战项目、文档和社区资源,...
- **编写第一个 Django 应用**:通过一系列教程,引导读者完成一个简单应用的开发,从项目结构、模型设计到视图和模板的编写。 - **高级教程:如何编写可重用的应用**:教授了如何设计可扩展且易于维护的应用程序。 ...
- **模板层**:介绍了 Django 强大的模板系统,包括语法、标签和过滤器等。 - **表单**:阐述了 Django 表单系统的工作原理及其在 Web 开发中的应用。 - **开发流程**:概述了 Django 开发项目的一般流程,包括版本...
Django是一个广受欢迎的Python Web框架,用于快速开发高效、可维护的网站应用程序。这个" Django源码剖析注释版本...同时,这也有助于开发者提升编程技巧,更好地遵循最佳实践,从而编写出更高效、更可靠的Django应用。