Django教程:第一个Django应用程序(1部分)
2013-09-23 磁针石
请看实例。本教程中将创建一个基本的投票应用。
它由两部分组成:查看投票的结果和投票的公共网站;添加、修改和删除投票的管理站点。
请先确认Django已经安装并检查版本号:
# python -c "import django;print(django.get_version())"
1.5.1
本教程基于 Django 1.5.* 和Python 2.x。
寻求帮助:django-users或#django onirc.freenode.net
创建project
# django-admin.py startproject mysite
这将在当前目录创建 mysite 目录。注意需要避免使用 python 保留字或 Django 组件名作为project名称。尤其注意不要使用如:django (与 Django 本身会冲突) 或者 test (与 Python 内置的包名会冲突).
Project创建的文件如下:
# ls -R mysite
mysite:
manage.py mysite
mysite/mysite:
__init__.py settings.py urls.py wsgi.py
l 外层 mysite根目录是你project容器。对Django该目录名并不重要; 你可以重命名。
l manage.py: 可让你以各种方式与Django项目进行交互命令行工具。你可以在 django-admin.py和manage.py 中查看manage.py 更多信息。
l 内层 mysite目录是project的实际 Python 包。
l mysite/__init__.py: 包初始化文件,默认为空.
l mysite/settings.py: 配置文件。
l mysite/urls.py: project的 URL 声明。
l mysite/wsgi.py: 一个 WSGI 兼容的 Web 服务器的入口,以便运行你的项目。
开发服务器
现在已经有一个简单的服务器了。进入外层mysite目录,执行
# python manage.py runserver
Validating models...
0 errors found
September 22, 2013 - 01:04:43
Django version 1.5.4, using settings'mysite.settings'
Development server is running athttp://127.0.0.1:8000/
Quit the server with CONTROL-C.
这样就启动了 Django开发服务器,一个纯Python的轻量级 Web 服务器。Django 包含了它。这样在产品投入使用之前不必配置产品服务器例如 Apache,方便更加快速开发。
**不要** 在任何生产环境中使用此服务器。它仅适用于开发。(Django提供的是 Web 框架的,而不是 Web 服务器。)
服务器运行时,在你Web 浏览器中访问http://127.0.0.1:8000/ 。你会看到 “Welcome toDjango”页面,表明开发服务器工作正常。
默认runserver 命令启动的开发服务器只监听localIP 的 8000 端口。
改变端口:
python manage.py runserver 8080
改变IP ,需要和端口号一起传递。因此,要监听所有外部 IP 地址:
python manage.py runserver 0.0.0.0:8000
更多资料参见runserver 。
数据库设置
编辑 mysite/settings.py 。这是一个普通的 Python 模块,包含了Django 模块级变量的设置。更改 DATABASES 中 'default' 下的以下键的值,以匹配您的数据库连接设置。
l ENGINE – 'django.db.backends.postgresql_psycopg2'或'django.db.backends.mysql',或'django.db.backends.sqlite3', 'django.db.backends.oracle' , 更多的参见alsoavailable。
l NAME – 数据库名。对 SQLite,是绝对路径的文件名(好像project下面文件直接输入文件名就可以,因为在GAE,SAE等云平台,是不太可能知道真实路径的?);如果该文件不存在,它会在第一次同步数据库时自动创建(见下文)。
当指定路径时,总是使用斜杠,即使是Windows 下(例如:``C:/homes/user/mysite/sqlite3.db``) 。
l USER – 用户名 ( SQLite 下不需要) 。
l PASSWORD – 密码 ( SQLite 下不需要) 。
l HOST – 数据库主机地址。如果是同一台物理机器,请将此处保留为空 (或者设置为 127.0.0.1) ( SQLite 下不需要) 。查看HOST了解详细信息。
如果你是数据库新手,我们建议使用 SQLite ,将 ENGINE 改为 'django.db.backends.sqlite3' 并且将 NAME 设置为你想存放数据库的地方。 Python 内置了SQLite,不需要额外安装。
当你编辑 settings.py 时,将 TIME_ZONE 修改为你所在的时区。默认值是美国中央时区(芝加哥)。
中国一般设置为TIME_ZONE = 'Asia/Shanghai'。
同时,注意文件底部的 INSTALLED_APPS 设置。它保存了当前 Django 实例已激活的所有 Django 应用。每个应用可以被多个项目使用,而且你可以打包和分发给其他人。
默认情况下,:setting:INSTALLED_APPS 包含以下应用,这些都是由 Django 提供的:
l django.contrib.auth – 身份验证系统。
l django.contrib.contenttypes – 内容类型框架。
l django.contrib.sessions – session 框架。
l django.contrib.sites – 网站管理框架。
l django.contrib.messages – 消息框架。
l django.contrib.staticfiles – 静态文件管理框架。
所有这些应用中每个应用至少使用一个数据库表,所以在使用它们之前需要创建数据库中的表:
python manage.py syncdb
syncdb 命令参照 settings.py 文件中的INSTALLED_APPS 设置创建必要的数据库表。每创建一个数据库表你都会看到一条消息,接着你会看到一个提示询问你是否想为验证系统内创建个超级用户。我们选择需要。
数据库命令行下输入:``dt``(PostgreSQL), SHOW TABLES; (MySQL), 或 .schema (SQLite) 可列出 Django 所创建的表。
创建模型
Djaong每个应用都是由Python 包,这些在Python path 中并且遵循django命名规范。 Django 有工具可以自动生成应用的基本目录架构,你可以专注于编写代码而不是去创建目录。
项目 ( Projects ) vs. 应用 ( apps )
项目与应用之间有什么不同之处?应用是一个提供具体功能的 Web 应用– 例如:博客系统、公共记录的数据库或简单的投票系统。项目是特定的 Web 网站相关的配置和其应用的集合。一个项目可以包含多个应用。一个应用可以在多个项目中使用。
你的应用可以存放在 Python path 中的任何位置。在本教程中,通过你的 manage.py 文件创建投票应用,以便它可以作为顶层模块导入,而不是作为 mysite 的子模块。