`

Django新手指南(1)

阅读更多

编写你的第一个Django程序,第一部分(上)

 

从示例程序开始吧。

 

通过这本新手入门,我们会从头至尾向你介绍怎样创建一个基本的投票程序。

 

这个程序包含了两个部分:

l         一个能够让用户查看投票选项并进行投票的前台。

l         一个能够进行投票管理的后台。

 

我们假设你已经安装了Django。你可以通过运行Python命令行交互界面并输入import django来确认是否已经安装了Django。如果刚才的命令成功运行了,表示Django已经安装完成。

 

从哪里获取帮助:

如果你在阅读这篇新手入门的时候遇到任何困难,请在DjangoGoogle小组留言或是访问DjangoIRC,从其他的用户那里获得帮助。

 

创建项目

 

如果这是你第一次使用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来安装Djangodjango-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_psycopg2mysqlsqlite3以及其他的数据库类型都可以。

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_ENGINEsqlite3)。SQLite包含在Python2.5及其后续版本中,所以你不用再安装其他的任何东西。

 

注意

如果你使用PostgreSQLMySQL,请确认你已经创建了一个数据库。在你的数据库命令行下使用命令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文件的数据库设置创建所有必须的数据表。每创建一个数据表的时候你都能看到对应的提示信息,并且系统还会提示你是否为认证系统创建一个超级用户。请按照提示创建超级用户。

 

如果你感兴趣,可以进入到数据库命令行内,输入\dtPostgreSQL)、SHOW TABLES;MySQL)或者.schemaSQLite)来显示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实例的名字(例如questionpub_date)就是字段的名字,字段的格式是亲和机器式的。在你的Python代码中会用到这个值,而数据库会将这个值认作表的列名。

 

你可以在初始化Field实例时使用第一位置可选参数来指定一个符合人类习惯的名称。这在Django的一些内省部分中被使用到了,而且这个还能作为文档来增强代码的可读性。如果没有提供这个参数,Django会使用符合机器习惯的名称。例如,我们只为Poll.pub_date定义了一个人类名称。对于模型中的其他字段,机器名称就已经足够让人们理解它表示什么含义了。

 

有些Field类有必要元素。比如CharField,要求你指定max_length。这并不只是用于数据库里,我们以后就会看到它也用在数据验证中。

 

最后,注意我们使用ForeignKey定义了一个关系。这会告诉Django每个Choice会同一个Poll进行关联。Django支持所有的通用数据库关系类型:多对一、多对多、一对一。

 

分享到:
评论

相关推荐

    (简体中文) Python新手使用Django架站的16堂课

    (简体中文) Python新手使用Django架站的16堂课 Python是目前很好受欢迎的程序设计语言 本书通过对Python语言使用很多的DjangoWebFramework的介绍 让读者可以轻松制作出全功能的动态网站。 本书分4部分 以16堂课来...

    Python新手使用Django架站的16堂课的范例 随书光盘

    本书分4部分,以16堂课来介绍Python新手使用Django架站的要点。第一部分(第1~3堂)以一个小型的个人博客网站为主轴,介绍如何快速建立一个实用的Django网站;第二部分(第4~7堂)是Django架构深入剖析,详细分析...

    Django 動態網頁教學

    本书分4部分 以16堂课来介绍Python新手使用Django架站的要点。靠前部分-靠前~3堂以一个小型的个人博客网站为主轴 介绍如何快速建立一个实用的Django网站;D1二部分-D14~7堂是Django架构深入剖析 详细分析Django的MVC...

    Django框架学习指南

    Django框架学习指南,能找到的资料大概只有这个。优点是详细;缺点是太注重展示django框架的优良特性,从而给python新手的阅读实践带来一定困难。

    Django架站的16堂課-活用Django+Web+Framework快速建構動態網站

    本书分4部分,以16堂课来介绍Python新手使用Django架站的要点。第一部分(第1~3堂)以一个小型的个人博客网站为主轴,介绍如何快速建立一个实用的Django网站;第二部分(第4~7堂)是Django架构深入剖析,详细分析...

    Python新手使用Django架站的16堂课(简体中文版)

    本书分4部分,以16堂课来介绍Python新手使用Django架站的要点。第一部分(第1~3堂)以一个小型的个人博客网站为主轴,介绍如何快速建立一个实用的Django网站;第二部分(第4~7堂)是Django架构深入剖析,详细分析...

    Django教程-Python开发-Django-Django学习研究-教学研究,配套资源

    无论你是初入Web开发领域的新手,还是有一定经验的开发者,这份Django资源教案都将为你提供宝贵的学习资源和指导。它将帮助你快速掌握Django框架的核心技能,为你的职业发展注入新的动力。 抓住这次学习Django的...

    基于Python+Django+mysql+html图书管理系统(高分课程设计)

    这是一个适合新手学习django的简易的图书管理系统。可实现用户的注册登录和书籍信息的增删改查等基本操作。 使用说明 1. 环境:python3 django mysql 2. 数据库名为book 包含用户信息表和书籍信息表 需要手动修改...

    md格式编写的良心教程 Python 100天从新手到大师 共100个完整源文件 含课程源代码.rar

    PEP8风格指南.md Python编程惯例.md Python参考书籍.md Python之禅.md README.md 更新日志.md 玩转PyCharm.md Day01-15\01.初识Python.md Day01-15\02.语言元素.md Day01-15\03.分支结构.md Day01-15\04.循环结构.md...

    development:讨论和发布CFPB开发团队标准的资源库

    – CFPB的软件开发新手? 请先阅读此内容。 :本文档概述了请求当前浏览器支持标准例外的决策过程。 使用Sauce Labs进行浏览器测试 构建项目的前端 代码审查指南 创建CommonJS模块 记录您的工作 前端测试 Git和...

    2018 猎豹网校 教程大全 资源难找赶紧保存吧

    猎豹网校 网店赢家淘宝网新手开店[MP4] 猎豹网校 透测测试 系统安全测试[MP4] 猎豹网校 淘宝卖家网店美工[MP4] 猎豹网校 搜索引擎搜索技巧[MP4] 猎豹网校 数据结构与算法_Java语言[MP4] 猎豹网校 数据结构与...

    java版中国象棋源码-My-Github-Stars:我的GitHub上的所有星星

    100天从新手到大师 - 关于python的面试题 - 精选的Flask资源和插件的精选列表 - Django 优秀资源大全。 - :smiling_face_with_sunglasses: Python Asyncio 精选资源列表,囊括了网络框架,库,软件等资源 - :books: ...

Global site tag (gtag.js) - Google Analytics