第一个 Django 应用,编写第一个视图

来自Django官方.png

检查Django版本

假定你已经阅读了 安装 Django。你可以在命令提示行输入命令(macOS/liunx)

python -m django --version

如果这行命令输出了一个版本号,证明你已经安装了此版本的 Django;如果你得到的是一个“No module named django”的错误提示,则表明你还未安装。

这里使用的Django 2.1 ,它支持 Python 3.5 和后续版本。如果你正在使用一个较老版本的 Python,在 我应该使用哪个版本的 Python 来配合 Django? 查找一个合适的 Django 版本。

创建项目

打开命令行,cd 到一个你想放置你代码的目录,然后运行以下命令(macOS/liunx):

django-admin startproject mysite

这行代码将会在当前目录下创建一个 mysite 目录。如果命令失败了,查看 运行django-admin时遇到的问题,可能能给你提供帮助。

让我们看看 startproject 创建了些什么:

mysite/ # 根目录只是你项目的容器, Django 不关心它的名字,你可以将它重命名为任何你喜欢的名字。
    manage.py #一个让你用各种方式管理 Django 项目的命令行工具。你可以阅读 [django-admin and manage.py](https://docs.djangoproject.com/zh-hans/2.1/ref/django-admin/) 获取所有 `manage.py` 的细节。
    mysite/ #目录包含你的项目,它是一个纯 Python 包。它的名字就是当你引用它内部任何东西时需要用到的 Python 包名。 (比如 mysite.urls).
        __init__.py # 一个空文件,告诉 Python 这个目录应该被认为是一个 Python 包。而不是一个普通文件夹
        settings.py # Django 项目的配置文件。如果你想知道这个文件是如何工作的,请查看 [Django settings](https://docs.djangoproject.com/zh-hans/2.1/topics/settings/) 了解细节。
        urls.py # Django 项目的 URL 声明,就像你网站的“目录”。阅读 [URL调度器](https://docs.djangoproject.com/zh-hans/2.1/topics/http/urls/) 文档来获取更多关于 URL 的内容。
        wsgi.py # 作为你的项目的运行在 WSGI 兼容的Web服务器上的入口。阅读 [如何使用 WSGI 进行部署](https://docs.djangoproject.com/zh-hans/2.1/howto/deployment/wsgi/) 了解更多细节。

启动 Django 自带的用于开发的简易服务器

让我们来确认一下你的 Django 项目是否真的创建成功了。请切换到 mysite 目录(项目根目录),然后运行下面的命令(macOS/liunx):

python manage.py runserver

你应该会看到如下输出:

<pre class="literal-block" style="font-family: &quot;Fira Mono&quot;, Consolas, Menlo, Monaco, &quot;Courier New&quot;, Courier, monospace; font-size: 14px; white-space: pre-wrap; overflow-wrap: break-word; font-variant-ligatures: no-common-ligatures; text-rendering: optimizespeed; color: rgb(12, 75, 51); border: 1px solid rgb(234, 234, 234); background: rgb(248, 248, 248); overflow: auto; border-radius: 4px; margin: 25px 0px; padding: 10px 20px; font-style: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">Performing system checks...

System check identified no issues (0 silenced).

You have unapplied migrations; your app may not work properly until they are applied.
Run 'python manage.py migrate' to apply them.

三月 30, 2019 - 15:50:53
Django version 2.1, using settings 'mysite.settings'
Starting development server at [http://127.0.0.1:8000/](http://127.0.0.1:8000/)
Quit the server with CONTROL-C.</pre>

刚刚启动的是 Django 内置的用于开发的简易服务器,它是一个用纯 Python 写的轻量级的 Web 服务器。因为你不需要进行配置生产级别的服务器(比如 Apache)方面的工作。

现在是个提醒你的好时机:千万不要 将这个服务器用于和生产环境相关的任何地方。这个服务器只是为了开发而设计的。(我们在 Web 框架方面是专家,在 Web 服务器方面并不是。)

现在,服务器正在运行,浏览器访问 https://127.0.0.1:8000/。你将会看到一个“祝贺”页面,随着一只火箭发射,服务器已经运行了。

停止服务

在刚才的命令窗口按:control+c

更换端口

默认情况下,runserver 命令会将服务器设置为监听本机内部 IP 的 8000 端口。

如果你想更换服务器的监听端口,请使用命令行参数。举个例子,下面的命令会使服务器监听 8080 端口(macOS/liunx):

python manage.py runserver 8080

如果你想要修改服务器监听的IP,在端口之前输入新的ip。比如,为了监听所有服务器的公开IP(你想要向网络上的其它电脑展示你的成果时很有用),使用命令(macOS/liunx):

 python manage.py runserver 0:8000

00.0.0.0 的简写。完整的关于开发服务器的文档可以在 :djamdin:runserver 参考文档中找到。

注意:
如果127.0.0.1:8000 能访问,而用本机ip访问不了,并且错误信息提示:Invalid HTTP_HOST header: '10.177.15.139:8080'. You may need to add '10.177.15.139' to ALLOWED_HOSTS.
解决方案:
将setting.py 文件的ALLOWED_HOSTS字段的值修改为 ALLOWED_HOSTS = ['*']

创建投票应用

现在你的开发环境——这个“项目” ——已经配置好了,你可以开始干活了。

在 Django 中,每一个应用都是一个 Python 包,并且遵循着相同的约定。Django 自带一个工具,可以帮你生成应用的基础目录结构,这样你就能专心写代码,而不是创建目录了。

项目 VS 应用
应用是一个专门做某件事的网络应用程序——比如博客系统,或者公共记录的数据库,或者简单的投票程序。项目则是一个网站使用的配置和应用的集合。项目可以包含很多个应用。应用可以被很多个项目使用。(我把它理解成类与方法的概念)

请确定你现在处于 mysite 目录中,我们将在你的 manage.py 同级目录下创建投票应用。然后运行这行命令来创建一个应用(macOS/liunx):

python manage.py startapp polls

这将会创建一个 polls 目录,它的目录结构大致如下:

mysite/ # 项目根目录,上面介绍过,这里不做介绍
    manage.py
    mysite/
        __init__.py
        settings.py
        urls.py
        wsgi.py
    polls/
        __init__.py
        admin.py
        apps.py
        migrations/
            __init__.py
        models.py
        tests.py
        views.py

这个目录结构包括了投票应用的全部内容。


编写第一个视图

让我们开始编写第一个视图吧。打开 polls/views.py,把下面这些 Python 代码输入进去:

from django.http import HttpResponse


def index(request):
    return HttpResponse("Hello, world. You're at the polls index.")

这是 Django 中最简单的视图。如果想看见效果,我们需要将一个 URL 映射到它——这就是我们需要 URLconf 的原因了。

为了创建 ,请在 polls 目录里新建一个 urls.py 文件。你的应用目录现在看起来应该是这样:

polls/
   __init__.py
   admin.py
   apps.py
   migrations/
       __init__.py
   models.py
   tests.py
   urls.py # 心脏的URLconf 用于 URL 映射
   views.py

在 polls/urls.py 中,输入如下代码:

from django.urls import path

from . import views

urlpatterns = [
    path('', views.index, name='index'),
]

下一步是要在根 URLconf 文件中指定我们创建的 polls.urls 模块。在 mysite/urls.py 文件的 urlpatterns 列表里插入一个 include(), 如下:

from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path('polls/', include('polls.urls')),
    path('admin/', admin.site.urls),
]

函数 include() 允许引用其它 URLconfs。当用户请求:http://127.0.0.1:8000/index/ 时,会先到根目录到urlpatterns中进行正则匹配,每当 Django 遇到include()时,它会截断与此项匹配的 URL 的部分,并将剩余的字符串发送到指定目录到 URLconf以供进一步处理。

现在可以验证是否正常工作,运行下面的命令:

python manage.py runserver

用你的浏览器访问 http://localhost:8000/polls/,你应该能够看见 "Hello, world. You're at the polls index." ,这是你在 index 视图中定义的。

注意:
如果你在这里得到了一个错误页面,检查一下你是不是正访问着http://localhost:8000/polls/ 而不应该是 http://localhost:8000/

参考:编写你的第一个 Django 应用,第 1 部分 | Django 文档 | Django

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,525评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,203评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,862评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,728评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,743评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,590评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,330评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,244评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,693评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,885评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,001评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,723评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,343评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,919评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,042评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,191评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,955评论 2 355

推荐阅读更多精彩内容