django教程-part1

创建你的第一个Django应用

让我们通过一个实例来学习。
通过这个教程,我们将会带你过一遍创建一个基本的投票应用的创建。
这个教程包含了两个部分 :

  • 一个可以让用户在上面查看投票结果和投票的公共网站。
  • 一个可以增加,修改,删除投票结果的后台管理网站。

我们假定你已经安装了Django,你可以通过运行下面的shell命令来区分django是否已经成功安装。
mac osx/Linux:

$ python -m django --version

windows:

/> py -m django --version

如果Django被安装了的话,你可以在shell中看到你安装django的版本。如果没有版本信息而是报错“No module named django”,说明没有成功安装。

这个教程使用了Django2.1版本,支持python3.5以上的版本。如果django的版本不匹配,你需要切换django的版本,找到对应版本的教程,在屏幕的右下角。


image.png

或者把django升级到最新版本。如果你使用了更老版本的python,请查看 What Python version can I use with Django?来寻找和Django匹配的python版本。

查看 How to install Django
来指导你如何删除旧版本的Django并安装新的版本。

哪里可以获取帮助

如果你在学习这个教程遇到问题时,可以发送email给django-users或者访问django on irc.freenode.net和其他django愿意帮助你的开发者讨论。

创建项目

如果这是你第一次使用django,你需要注意一些初始化的设置。换句话说,创建项目时会自动生成一些代码-Django实例的设置的集合,包括数据库配置,Django特定的配置,应用特定的配置。
来到命令行,cd到你要创建项目的文件夹,然后运行下面的命令。
mac/Linux

django-admin startproject mysite

windows:

django-admin startproject mysite

这将会在你当前的目录下创建一个mysite文件夹,如果这一步出错了,请看 Problems running django-admin.

注意
你需要避免给项目命名为Python或者Django组件的名字,特别是,这意味着你应该避免使用像“django”(这将会和django本身冲突)或者“test”(这将会和python内置的包冲突)这样的项目名称。

这些代码应该放在哪里?
如果你的后端是PHP(没有使用流行的框架),你应该把代码放在web服务器的根目录下(类似于/var/www)。使用Django时你不必这么做,把python代码放到web服务器根目录并不是一个好办法,这会有一定的风险让用户在web浏览器里看到你的代码,这对安全是不利的。
应该把代码放到根目录意外的文件夹,比如/home/mycode。

让我们来看一下startproject命令创建了什么:


image.png

这些文件分别是:

  • 外层的mysite是根目录,它仅仅是项目的一个容器。它的名字和Django没有关系。你可以重命名为任何你喜欢的名字。
  • manage.py: 一个可以通过命令行来实现和Django应用多种交互方式的文件。你可以阅读所有有关manage.py的细节在django-admin and manage.py中。
  • 内层的mysite目录:是项目实际的python模块,它的名字就是python模块的名字,你需要使用import来导入里面的东西,比如mysite.urls
  • mysite/init.py: 是一个空文件,这会让python认为这个目录是一个Python模块。如果你是一个Python初学者,阅读一下Python官方文档中的more about packages
  • mysite/settings.py: 用来配置Django项目, Django settings将会告诉你如何设置使其工作。
  • mysite/urls.py: 声明了Django项目的URL,是一个django驱动所网站的列表。你可以阅读更多关于URLs在URL dispatcher.
  • mysite/wsgi.py: 一个WSGI兼容的web服务器提供服务来启动项目的入口。

开发者服务器

让我们确认你的Django项目是否可以工作。切换到外层的mysite目录,如果你还没准备好,并且运行了下面的命令.
mac/Linux:

python manage.py runserver

windows:

py manage.py runserver

你会在命令行中看到下面的输出:


image.png

注意
现在需要忽略unapplied database migrations的警告,我们稍后会处理数据库。

你已经开启了Django开发服务器,一个用纯python写的轻量级web服务器。我们把它放到了Django中,以便你能快速的开发应用,直到你发布到生产环境之前,就不用你再去处理生产服务器的配置问题了-例如Apache。

现在需要留意:不要应用这个web服务器到任何生产环境。它只能用于开发环境。(我们的任务是打造web框架,而不是服务器)。

现在,服务器已经运行起来了,在浏览器中访问http://127.0.0.1:8000/,你将会看到一个“恭喜”界面,一个火箭起飞的图标,It worked!

修改端口号
默认情况下,runserver命令会在内部会换地址的8000端口启动开发服务器。
如果你想修改服务器的端口号,像参数一样传递给命令行,例如, 这个命令就会8080端口启动服务器。
python manage.py runserver 8080

如果你想修改服务器的ip,和端口号一起传递进去,例如,监听所有公网的IP地址(在你运行Vagrant或者在网络的其他电脑上展示你的页面时会很有用) :
python manage.py runserver 0:8080

0是0.0.0.0的简写,完成的开发者服务器文档可以在 runserver找到。

自动重载服务器
当被请求时,开发服务器会自动重载python代码。你不必在修改python代码后重启服务器来让修改见效。可是,像添加文件这样的操作不会触发重启,所以在这样的情况下你需要手动重启服务器。


创建投票应用

现在你的开发环境的项目已经建好了,你可以着手让它工作了。

你用Django建立的每个应用都会遵循约定,包含一个python模块。django会自动生成基本的目录结构,所以你可以专注于代码,而非创建目录。

项目和应用
项目和应用之间有什么不同呢?应用是一个像博客,数据库的记录或者一个简单的投票应用程序。项目是配置和多个应用程序的集合,一个项目可以包含多个应用,一个应用也能被包含在多个项目中。

你的应用可以放在Python path的任何地方,在这个教程中,我们会把投票应用创建在manage.py的旁边,这样就能像顶级模块一样被导入了,而不是mysite的一个子模块。

为了创建你的应用,请确保和你的manage.py在同一级目录,并输入如下命令:

$ python manage.py startapp polls

这会创建一个polls目录,结构就像这样:


image.png

这个目录结构就是投票应用所在的地方。


创建你的第一个视图

让我们写第一个视图吧,打开poll/views.py文件,并把下面的python代码放进去。


image.png

这可能是Django中最简单的视图了,为了能调用视图,我们需要把他映射到一个URL上,并且我们需要一个URLconf。

为了在投票应用中创建URLconf,创建urls.py文件,你的应用目录开起来是这样的:


image.png

poll/urls.py文件包含了如下代码:


image.png

下一步,是在polls.urls模块指向根URLconf。在mysite/urls.py中,导入django.urls.include,并把include函数插入到urlpatterns列表中,代码如下:


image.png

include方法允许引用其他的URLconf,当django遇上include函数时,它砍断指向其他url的链接,并发送剩余的字符串到URLconf做进一步处理。

include函数的想法是,制造简单的“即插即用”的URL。所以,polls在他自己的URLconf中(polls/urls.py),它可以被'/polls/'取代,也可以是'/fun_polls/',还可以是'/content/polls/',或者其他路径,这个应用都会正常工作。

什么时候使用include函数?
当你包含了其他的URL模式时,你应该总是使用include函数。admin.site.urls是唯一的例外。

你已经在URLconf中连线了一个index视图,让我们确认一下它能否正常工作,运行如下代码:

python manage.py runserver

在浏览器中打开 http://localhost:8000/polls/,你应该能看到你在index视图中定义的文本“Hello, world. You’re at the polls index.”。

页面未找到?
如果你的页面报错了,检查浏览器的url,确保是 http://localhost:8000/polls/,而不是http://localhost:8000/

path()函数被传递了4个参数,两个是必须的:route,view。还有两个可选参数,kwargs,name。此时此刻,是时候回顾一下这些参数都是什么了。

path() argument: route

route是包含url模式的一个字符串。当处理一个请求时,django以url模式中的第一个部分开始,沿着urlpatterns列表向下,并逐个和请求的url进行对比,直到找到一个匹配的。

模式并不搜索GET和POST参数,或者域名。例如,一个到https://www.example.com/myapp/的请求,URLconf将会查找myapp/。一个到https://www.example.com/myapp/?page=3的请求,URLconf还是只会查找myapp/

path() argument: view

当django发现了匹配的url模式时,它调用了一个以HTTPResponse为第一个参数的特殊视图函数,并且从路由中被捕获的值会作为关键字参数。我们一会儿会给出一个例子。

path() argument: kwargs

可以将任意的关键字参数以字典的形式传递到目标视图中,在这个教程中我们不打算使用django的这个特性。

path() argument:name

命名你的url,让它明确的指向任何地方,特别是模板。这个强大的特性允许你改变项目的全局url模式时,只需修改一个文件就好了。

当你了解了基本的请求相应流后,阅读part 2 of this tutorial来让数据库开始工作。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容