返回介绍

第一章 Django1.6 入门

发布于 2025-02-26 23:49:05 字数 5284 浏览 0 评论 0 收藏 0

本章我们会学习到以下内容:

  • 使用虚拟环境
  • 创建一个项目文件结构
  • 用 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 文件中。

具体做法

执行以下步骤:

  1. local_settings.py 的尾部添加声明在相同目录下的 local_settings.py 的描述:
#settings.py
# ... 把这些代码放到文件的结尾 ...
try:
  execfile(os.path.join(os.path.dirname(__file__), ';local_settings'))
except IOError:
  pass
  1. 创建 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_toolbarINSTALLED_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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文