第一章 Django1.6 入门
本章我们会学习到以下内容:
- 使用虚拟环境
- 创建一个项目文件结构
- 用 pip 处理项目依赖
- 在项目中包括外部的依赖
- 在 settings 中定义相对路径
- 为 Subersion 用户动态地配置 STATIC_URL
- 为 Git 用户动态地配置 STATIC_URL
- 创建并包括本地设置
- 把 UTF-8 设置为 MySQL 配置的默认编码格式
- 设置 Subversion 的忽略特性
- 创建 Git 的忽略文件
- 删除 Python 编译文件
- Python 文件中的导入顺序
- 定义可重写的 app 设置
引言
为子版本用户动态地设置 STATIC_URL
如果你对 STATIC_URL
设置一个静态值,那么每次你更新 CSS 文件,JavaScript 文件,或者图片都需要清除浏览器的缓存以应用改变。有一个
预热
具体做法
实现原理
参见
为 Git 用户动态地设置 STATIC_URL
预热
确保你的项目处理 Git 版本控制器之下。
具体做法
实现原理
参见
创建并包含本地设置
你不得不需要至少两个不同的项目实例:一个是创建新特性的开发环境,另一个是托管服务器中的公开网站环境。此外,可能会有针对其他开发者的不同的开发环境。你或许也需要有一个过渡性的环境以在一个类公开网站这样的情况下测试项目。
预热
不同环境的大多数设置都会共享并保存在版本控制中。不过,这里仍人会有一些针对某些项目环境的特别设置,例如,数据库或者电子邮件设置。我们把它们都放进 local_settings.py
文件中。
具体做法
执行以下步骤:
- 在
local_settings.py
的尾部添加声明在相同目录下的local_settings.py
的描述:
#settings.py
# ... 把这些代码放到文件的结尾 ...
try:
execfile(os.path.join(os.path.dirname(__file__), ';local_settings'))
except IOError:
pass
- 创建
local_settings.py
然后把特定的环境设置加入到文件中:
#local_settings.py
DATABASES = {
"default": {
"ENGINE": "django.db.backends.mysql",
"NAME": "myproject",
"USER": "root",
"PASSWORD": "root",
}
}
}
EMAIL_BACKEND = "django.core.mail.backends.console.EmailBackend"
INSTALLED_APPS += (
"debug_toolbar",
)
工作原理
如你所见,本地设置并没有正常地导入,它们却包含在 settings.py
中并被执行。这样不仅允许你创建或者重写存在的设置,而且也可以调整 settings.py
文件中元组或者列表;例如,这里我们添加 debug_toolbar
到 INSTALLED_APPS
以启用对 SQL 查询,模板上下文变量,等等的调试。
参见
The Creating a project file structure recipe
The Toggling Debug Toolbar recipe in Chapter 10, Bells and Whistles
配置 UTF_8 作为 MySQL 配置的默认编码
预热
具体做法
工作原理
设置 Subversion 的忽略特性
预热
具体做法
打开命令行工具并社会默认编辑器为 nano,vi,vim
或者其他的任何你个人喜欢的编辑器:
$ export EDIOR=nano
提示
如果你还没有选择自己喜欢的编辑器,我推荐使用 nano
工作原理
参见
创建 Git 的忽略文件
预热
具体做法
使用你最喜欢的文本编辑器,在 Django 项目的根目录下创建一个 .gitinore
文件,然后把这些文件和目录放进刚创建的文件中:
#.gitinore
*.pyc
/myproject/local_settings.py
/myproject/static/
/myproject/tmp/
/myproject/media/
工作原理
参见
The Setting the Subversion ignore property recipe
删除 Python 的编译文件
预热
具体做法
工作原理
参见
Python 文件中的导入顺序
当你创建 Python 模块时,保持文件内的结构一致是个好的做法。这样做可以让其他的开发者和你自己在阅读代码时相对轻松一些。这个方法会向你演示如何组织导入。
预热
在 Django 项目中创建一个虚拟目录。
具体做法
在你创建的 Python 文件中应用下面的结构。然后要做的就是,在第一行定义 UTF-8 作为默认的 Python 文件编码,并把分类的导入放进文件区域:
# -*- coding: UTF-8 -*-
# System libraries
import os
import re
from datetime import datetime
# Third-party libraries
import boto
from PIL import Image
# Django modules
from django.db import models
from django.conf import settings
# Django apps
from cms.models import Page
# Current-app modules
import app_settings
工作原理
如下,我们有五个主要的目录被导入:
更多内容
参见
定义可重写的 app 设置
该做法会向你演示如何给应用定义设置,它可以在之后于项目的 settings.py
或者 local_settings.py
文件中被重写。对于可重复使用的应用该做法特别有效。
预热
手动地创建 Django 应用,或者利用下面的这个命令:
(myproject_env)$ django-admin.py startapp myapp1
具体做法
如果你刚好有一个到两个设置,你可以在 models.py
中使用下面的模式。如果设置也很多,你刚好也想要更好的组织它们,那么你可以在应用中创建一个文件 app_settings.py
,然后以下列方式写设置:
#models.py or app_settings.py
# -*- coding: UTF-8 -*-
from django.conf import settings
from django.utils.translation import ugettext_lazy as _
SETTING1 = getattr(settings, "MYAPP1_SETTING1", u"default value")
MEANING_OF_LIFE = getattr(settings, "MYAPP1_MEANING_OF_LIFE", 42)
STATUS_CHOICES = getattr(settings, "MYAPP1_STATUS_CHOICES", (
('draft', _("Draft")),
('published', _("Published")),
('not_listed', _("Not Listed")),
))
然后,你可以在 models.py
中以下面的方法使用应用的设置:
#models.py
# -*- coding: UTF-8 -*-
from django.db import models
from django.utils.translation import ugettext_lazy as _
from app_settings import STATUS_CHOICES
class NewsArticle(models.Model):
# ...
status = models.CharField(_("Status"),
max_length=20, choices=STATUS_CHOICES
)
如果你想要为一个项目重写 STATUS_CHOICES
,你只需简单地打开 settings.py
并加入下面代码:
#settings.py
# ...
from django.utils.translation import ugettext_lazy as _
MYAPP1_STATUS_CHOICES = (
("imported", _("Imported")),
("draft", _("Draft")),
("published", _("Published")),
("not_listed", _("Not Listed")),
("expired", _("Expired")),
)
工作原理
Python 函数, getattr(object, attribute_name[, default_value])
,视图从 object
获取属性 attribute_name
,如果未找到属性则返回 default_value
。这个例子中,不同的设置从 Django 项目设置模块中被视图取回,如果这些设置没找到,则默认值被使用。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论