编写你的第一个Django程序,第一部分(上)
从示例程序开始吧。
通过这本新手入门,我们会从头至尾向你介绍怎样创建一个基本的投票程序。
这个程序包含了两个部分:
l 一个能够让用户查看投票选项并进行投票的前台。
l 一个能够进行投票管理的后台。
我们假设你已经安装了Django。你可以通过运行Python命令行交互界面并输入import django来确认是否已经安装了Django。如果刚才的命令成功运行了,表示Django已经安装完成。
从哪里获取帮助:
如果你在阅读这篇新手入门的时候遇到任何困难,请在Django的Google小组留言或是访问Django的IRC,从其他的用户那里获得帮助。
创建项目
如果这是你第一次使用Django,你需要注意一下初始化设置。也就是说,你需要自动创建一些Django项目初始化的代码——包括数据库设置、Django特性设置以及程序特性设置。
在命令行界面下,进入到你放置代码的目录中,执行命令django-admin.py startproject mysite。这将在当前目录下创建一个mysite目录。
Mac OS X权限设置
如果你是用的是Mac OS X操作系统,你在执行上述命令的时候可能会看到“permission denied”的提示信息。这是因为在基于Unix的操作系统中,必须要为文件设置可执行权限才能让文件像程序一样执行。打开终端,切换目录到django-admin.py所在的目录,执行命令chmod +x django-admin.py。
注意
你要避免用Python内置模块或是Django组件来命名项目。这就是说你应该避免使用django(与Django名称冲突)或是test(与Python内置模块冲突)这样的名称。
如果你是通过python setup.py来安装Django,django-admin.py就应该在你的系统路径下。如果不在的话,你可以在site-packages/django/bin下找到,这里site-packages位于Python的安装路径下。最好在/usr/local/bin下为django-admin.py建立软链接。
代码应该放在哪?
如果你有PHP的背景,你很可能习惯把代码放在Web服务器的文档根目录下面(比如/var/www)。使用Django,你不用这么做。把Python代码放在Web服务器的文档根目录下面并不是一个好办法,因为这会增加用户通过Web服务器浏览你的代码的风险。这样对系统安全性不好。把你的代码放在文档根目录之外,比如/home/mycode。
Let’s look at what startproject created:
我们来看看startproject都创建了些什么:
mysite/
__init__.py
manage.py
settings.py
urls.py
这些文件是:
l __init__.py 一个空文件,它表示当前文件夹要被当做一个Python包来对待。(如果你是Python初学者,关于包的概念请看官方文档)
l manage.py 命令行交互工具。你可以在django-admin.py and manage.py找到与manage.py有关的所有细节资料。
l settings.py Django项目的配置文件。Django设置会告诉你这个文件是怎样工作的。
l urls.py Django项目的URL声明文件。你可以在URL分发器中找到更多的相关内容。
开发服务器
我们来看看这能不能正常运行。进入mysite目录,执行命令python manage.py runserver。你能看到如下的输出:
Validating models...
0 errors found.
Django version 1.0, using settings 'mysite.settings'
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
你已经启动了Django开发服务器,一个以Python编写的轻量级Web服务器。我们在Django中包含了这个小玩意是为了让你在发布程序之前,能够不需要配置生产环境的服务器而进行快速开发。
现在请好好注意:千万别在生产环境上用这个自带的服务器。它只是为开发而使用的。(我们的业务是做Web框架,不是Web服务器。)
现在服务器正在运行中,访问http://127.0.0.1:8000/。你会看到一个有意思的类似蜡笔画的浅蓝色“Welcome to Django”页面。嗯,它正常运行了!
改变端口
默认情况下,runserver让开发服务器通过8000端口进行通信。如果你想改变服务器的端口,把端口号作为命令行参数传入即可。下面的例子就是将服务器端口设置为8080:
python manage.py runserver 8080
有关开发服务器的全部文档,可以在runserver参考中找到。
数据库设置
现在编辑settings.py。这是一个Python的模块文件,有很多代表Django设置的模块变量。你可以改变如下的设置来匹配你的数据库连接参数:
l DATABASE_ENGINE postgresql_psycopg2、mysql、sqlite3以及其他的数据库类型都可以。
l DATABASE_NAME 数据库的名称。如果你使用SQLite,数据库就是一个文件;这种情况下,DATABASE_NAME应当是这个文件的绝对路径。如果文件不存在,在第一次同步数据库的时候会创建这个文件(下面有详细介绍)。
在填写路径的时候,永远都要使用斜杠符号(/),就算是在Windows上也是如此(比如C:/homes/user/mysite/sqlite3.db)。
l DATABASE_USER 访问数据库的用户名(SQLite下不使用)。
l DATABASE_PASSWORD 访问数据库的密码(SQLite下不使用)。
l DATABASE_HOST 数据库所在主机。如果你的数据库在同一台物理机器上这里就可以留空(SQLite下不使用)。
如果你是个数据库新手,我们建议你使用SQLite(设置DATABASE_ENGINE为sqlite3)。SQLite包含在Python2.5及其后续版本中,所以你不用再安装其他的任何东西。
注意
如果你使用PostgreSQL或MySQL,请确认你已经创建了一个数据库。在你的数据库命令行下使用命令CREATE DATABASE database_name即可。
如果你使用SQLite,就什么都不用创建了——数据库文件在需要的时候会自动创建。
在编辑settings.py时,注意一下文件底部的INSTALLED_APPS设置。这个变量保存了在当前Django项目中可用的Django程序的名称。Django程序可以在多个项目中复用,而且你可以把这些程序打包部署以供其他的程序调用。
默认情况下,INSTALLED_APPS包含了以下的App,都是Django自带的:
django.contrib.auth 认证系统
django.contrib.contenttypes content types框架
django.contrib.sessions session框架
django.contrib.sites 使用一个Django项目来管理多个站点的框架
为了方便公用,这些程序都默认包含在配置文件中。
每个程序都至少用到了一个数据表,所以,我们要在数据库中创建对应的数据表。执行下面的命令:
python manage.py syncdb
syncdb命令会查找INSTALLED_APPS设置并根据settings.py文件的数据库设置创建所有必须的数据表。每创建一个数据表的时候你都能看到对应的提示信息,并且系统还会提示你是否为认证系统创建一个超级用户。请按照提示创建超级用户。
如果你感兴趣,可以进入到数据库命令行内,输入\dt(PostgreSQL)、SHOW TABLES;(MySQL)或者.schema(SQLite)来显示Django创建的数据表。
为最低要求者所准备
上面说道,默认的程序是为了方便共用包含进来的,但是不是所有人都需要它们。如果你一个都不需要,就在执行syncdb前将INSTALLED_APPS内的这些程序注释掉或者直接删除。syncdb只会为INSTALLED_APPS内的程序创建数据表。
创建模型
现在你的项目环境就已经建立好,可以开始正式的工作了。
你用Django写成的每个程序都是由Python包组成的,这些包位于Python Path中并遵循一定的命名规范。Django有个工具能够自动生成程序的基本目录结构,所以你可以专注与写代码而不用去创建目录。
项目VS程序
项目(project)和程序(app)之间有什么不同?程序是可以是一个博客系统、公共记录的数据库或非常简单的投票程序。项目是一个网站的配置和程序的集合。项目可以包含多个程序;程序也可以运用到多个项目中去。
在这本新手入门中,为了简便,我们会在mysite目录下创建投票程序。这个程序就会耦合到这个项目中——也就是说,投票程序内的所有Python代码可以用mysite.polls来进行引用。在后面的部分中,我们会讨论怎样在部署的时候将程序进行解耦。
要创建程序,请确定你现在位于mysite目录下并输入以下命令:
python manage.py startapp polls
这样做会创建一个polls目录,结构如下所示:
polls/
__init__.py
models.py
views.py
这个目录就是投票程序的正式结构。
在Django中开发一个有数据库的Web程序的第一步就是定义模型——就是数据库设计以及附加元数据。
哲理
模型是你的数据的单一的、限定的源。它包含你要保存的数据的基本字段和行为。Django遵循DRY原则。目标是为了只在一处地方定义你的数据模型并能够自动从其中获取数据。
在我们的投票程序中,要创建两个模型:polls(投票)和choices(选项)。投票有问题和发布日期两个字段。选项有两个字段:每个选项的文本内容和投票统计。每个选项都和投票进行关联。
这些概念都由Python类所表现出来。编辑polls/models.py文件,加入下面的代码:
from django.db import models
class Poll(models.Model):
question = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
class Choice(models.Model):
poll = models.ForeignKey(Poll)
choice = models.CharField(max_length=200)
votes = models.IntegerField()
关于max_length的错误
如果Django发出错误信息告诉你max_length不是一个有效的参数,那你可能就是在用Django的旧版本。(当前的新手入门是建立在最新的Django版本上的)如果你是从SVN中获取的Django开发版本(详细信息看这里),你就不会有这些问题。
如果你坚持要用Django的旧版本,那你就该参考Django 0.96的新手入门,这篇文章中会包含一些只在Django最新开发版本中包含的特性。
上面的代码很直接。每个模型都由一个继承自django.db.models.Model的类来描述,都有一定数量的类变量,每个类变量都对应一个数据库字段。
每个字段都由一个Field类的实例来进行描述——比如CharField表示字符类型的字段而DateTimeField表示日期时间型的。这会告诉Django数据库字段保存了什么类型的数据。
每个Field实例的名字(例如question或pub_date)就是字段的名字,字段的格式是亲和机器式的。在你的Python代码中会用到这个值,而数据库会将这个值认作表的列名。
你可以在初始化Field实例时使用第一位置可选参数来指定一个符合人类习惯的名称。这在Django的一些内省部分中被使用到了,而且这个还能作为文档来增强代码的可读性。如果没有提供这个参数,Django会使用符合机器习惯的名称。例如,我们只为Poll.pub_date定义了一个人类名称。对于模型中的其他字段,机器名称就已经足够让人们理解它表示什么含义了。
有些Field类有必要元素。比如CharField,要求你指定max_length。这并不只是用于数据库里,我们以后就会看到它也用在数据验证中。
最后,注意我们使用ForeignKey定义了一个关系。这会告诉Django每个Choice会同一个Poll进行关联。Django支持所有的通用数据库关系类型:多对一、多对多、一对一。
分享到:
相关推荐
### Django Web 开发指南 #### 一、简介 《Django Web 开发指南》是一本专为希望使用Python进行Web应用开发的技术人员所撰写的书籍。本书由Jeff Forcier、Paul Bissex与Wesley Chun共同编写,三位作者都是在Python...
(简体中文) Python新手使用Django架站的16堂课 Python是目前很好受欢迎的程序设计语言 本书通过对Python语言使用很多的DjangoWebFramework的介绍 让读者可以轻松制作出全功能的动态网站。 本书分4部分 以16堂课来...
1. Django简介与安装:教程首先介绍了Django框架的基本概念,接着详细指导了如何安装Python环境、Django框架以及配置数据库,为新手入门奠定了基础。 2. 项目结构与MVC设计模式:介绍了如何在Django中创建新项目,...
### Django+Web开发指南 #### 一、简介与概述 《Django+Web开发指南》是一本关于Python Web框架Django的详细介绍书籍...无论你是刚接触Django的新手还是已经有一定经验的开发者,都可以从中获得有价值的信息和指导。
- **5.1 至 5.2 常见问题解答**:提供了关于 Django 使用过程中可能遇到的常见问题及解答,有助于新手快速解决问题。 通过以上概览,我们可以看出 Django 1.5 文档覆盖了从入门到进阶的所有知识点,并且提供了丰富...
**Django新手指南** Django是一个基于Python的高级Web框架,它强调了代码的简洁性和可重用性,使得开发者可以快速地构建高效、可扩展的Web应用。本指南将帮助初学者理解Django的基本概念,并逐步学习如何使用Django...
- **起步指南**:这部分是新手入门必备的教程,指导用户从零开始安装和配置 Django,并通过一个简单的示例应用程序来了解 Django 的基本结构和功能。 - **模型层**:解释了如何定义数据模型以及 Django ORM(对象...
本文档为 Django 1.5.3 版本提供了详尽的指导,旨在帮助开发者从零开始构建高质量的 Web 应用程序。文档由 Django 软件基金会发布于 2013 年 9 月 14 日。 #### 二、文档结构与主要内容 ##### 1. Django 文档概述 ...
1.9版本的Django官方文档提供了从零开始学习Django的“First steps”部分,这部分内容是为新手或者刚开始学习编程的开发者准备的,内容包括从Django的基础概览、安装到具体的教程,涵盖了请求和响应、模型和管理后台...
### Django后端新手如何初始化配置 对于初学者来说,Django 是一个功能强大且易于上手的 Python Web 开发框架。本文将详细指导你完成 Django 项目的初始化配置,并重点介绍如何连接数据库以及如何实现基本的增删改...
这部分通常会指导新手开发者如何设置开发环境,创建项目和应用,并编写简单的视图、模板和表单。 3. 模型和数据库 这部分会介绍如何定义数据模型,以及如何与数据库交互。Django提供了对象关系映射(ORM)系统,使得...
**Django Web开发指南** Django,一个基于Python的开源Web框架,因其高效、安全且易于使用的特点,已经成为全球开发者构建Web应用...无论你是Python新手还是资深开发者,这份指南都能成为你探索Django世界的宝贵资源。
### 《两勺 Django 1.11:最佳实践指南》关键知识点解析 #### 一、书籍概述 《两勺 Django 1.11:最佳实践指南》(Two Scoops of Django 1.11: Best Practices for Django)是 Daniel Roy Greenfeld 和 Audrey Roy ...
**Django 1.11 文档 HTML 版** Django 1.11 是一个功能强大、高效...无论你是正在学习Django的新手,还是寻求特定问题解决方案的开发者,都能从中受益。记得时常查阅文档,它会成为你Django开发旅程中不可或缺的伙伴。
### Django框架学习指南 #### 一、概述与背景 Django 是一个高级的 Python Web 框架,它鼓励快速开发、干净且实用的设计。它遵循 MVC(模型-视图-控制器)架构模式,旨在通过减少重复代码来简化Web应用程序的开发...
1. Django文档(Djangodocumentation) 文档的起始部分通常会介绍如何获取帮助以及文档的组织方式。接着,会深入探讨Django的一些主要组件,包括模型层、视图层、模板层、表单等。此外,还会涉及Django开发流程、...
这部分内容为新手提供了快速上手指南,包括如何安装 Django、创建项目、编写第一个应用等基础知识。 **4. 模型层 (The model layer)** 模型层是 Django 框架的核心之一,负责数据的存储和检索。这一章节详细介绍了...
1. Django文档的组织结构 - 文档通常会有一个组织结构,它指导读者如何导航并理解不同章节。例如,它可能会从新手引导开始,然后逐步深入到模型层、视图层、模板层和表单处理等。 2. Django的安全 - Django框架...
- **新手入门**:为初次接触Django的用户提供入门指南,包括环境搭建、项目创建等基础知识。 - **从零开始**:适合完全没有经验的新手,详细介绍如何一步步构建一个Django应用。 - **概览**:对Django的整体架构进行...
- 新手可以通过官方文档中的“编写你的第一个Django应用”系列指南快速上手,这部分内容通常会引导初学者一步步完成从安装Django到创建、运行并测试一个基础Web应用的整个过程。 3. 模型层(The model layer) - ...