Django初学者入门指南1-初识(译&改)

Django初学者入门指南1-初识(译&改)

Django初学者入门指南2-基础知识(译&改)

Django初学者入门指南3-高级概念(译&改)

Django初学者入门指南4-登录认证(译&改)

Django初学者入门指南5-存储数据(译&改)

Django初学者入门指南6-基于类的页面(译&改)

Django初学者入门指南7-部署发布(译&改)

>>原文地址 By Vitor Freitas

简介

欢迎

今天我要开始一个关于Django基础知识的新系列教程。这是一个完整的初学者指南开始学习Django。材料分为七个部分。我们将详细探讨所有的基本概念,从安装、开发环境的准备、模型、视图、模板、url到更高级的主题,如迁移、测试和部署。

为了做一个容易遵循,信息丰富,阅读乐趣的教程,我想做些改变。于是我想出了一个主意,就是沿着文本创作一些漫画来说明一些概念和场景。希望你们会喜欢!

在我们开始之前…

当我在一所大学担任代课教授时,我曾在计算机科学课程中为新来的学生讲授web开发学科的介绍。我总是用孔子的这句话开始新的课程:实践出真知.

实践出真知

为什么要学习Django?

Django是一个用Python编写的Web框架。Web框架是一种支持动态网站、应用程序和服务开发的软件。它提供了一组工具和功能来解决与Web开发相关的许多常见问题,例如安全特性、数据库访问、会话、模板处理、URL路由、国际化、本地化等等。

使用诸如Django这样的Web框架,使我们能够以标准化的方式非常快速地开发安全可靠的Web应用程序,而不必重新设计轮子。

那么,Django有什么特别之处?对于初学者来说,它是一个python的web框架,这意味着您可以从广泛的开源库中获益。Python包索引存储库托管了超过116K个包(根据2017年9月6日)。如果你需要解决一个特定的问题,很可能有人已经为它实现了一个库。

Django是用Python编写的最流行的Web框架之一。它绝对是目前最全的,提供了一系列现成的功能,例如用于开发和测试的独立Web服务器、缓存、中间件系统、ORM、模板引擎、表单处理、与Python的单元测试工具的接口。Django还附带了一系列额外的功能,提供了内置的应用程序,如身份验证系统、带有自动生成的CRUD操作页面的管理界面、生成联合提要(RSS/Atom)、站点地图。甚至还有一个地理信息系统(GIS)框架构建在Django中。

Django的开发得到了Django软件基金会的支持,并得到了JetBrains和Instagram等公司的赞助。Django也已经存在了一段时间了。经过12年多的打磨,已经是一个成熟、可靠和安全的Web框架。

都有哪些大厂在使用Django?

你可以通过已知的在使用Django的大厂产品,去了解Django能够做些什么,有些什么功能。比如: Instagram, Disqus, Mozilla, Bitbucket, Last.fm, National Geographic.

如果还想了解更多的话,可以参考 Django Sites 数据库, 他们详细列举了超过5000家使用Django的网站。

顺便说一句,去年,在Django Under the Hood 2016大会上,Django核心开发者Carl Meyer和Instagram员工就Instagram如何大规模使用Django以及它如何支持他们的增长发表了演讲。这个有趣的谈话耗时一个小时,如果你有兴趣的话可以去听一听。


安装

我们需要做的第一件事是在我们的机器上安装一些程序,以便能够开始玩Django。基本设置包括安装Python、Virtualenv和Django。

需要安装的软件

你可以不使用虚拟环境,但强烈建议使用。特别是如果你刚刚开始,最好还是使用虚拟环境进行开发测试。

使用Django开发网站或Web项目时,必须安装外部库来支持开发是非常常见的。使用虚拟环境可以保证开发的每个项目都有其独立的环境,依赖关系不会冲突。它还允许您在本地机器项目中维护运行在不同Django版本上的项目。

而且使用虚拟环境非常简单。

安装 Python 3.6.2

我们要做的第一件事是安装最新的Python的Release版本(我写这篇教程的时候是python3.6.2)。如果有更新的版本,那就使用最新吧,接下来的步骤应该差不多。

最好的方式是通过Homebrew进行安装,如果你的电脑还未安装Homebrew,通过终端执行下面的命令进行安装:

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

安装时间可能有点长,但它会自动帮你处理好。当看到下面的信息时,就代表安装完成了:

==> Installation successful!

==> Homebrew has enabled anonymous aggregate user behaviour analytics.
Read the analytics documentation (and how to opt-out) here:
  https://docs.brew.sh/Analytics.html

==> Next steps:
- Run `brew help` to get started
- Further documentation:
    https://docs.brew.sh

我们将使用python3,因为最重要的Python库已经被移植到python3上,而且下一个主要的Django版本(2.x)将不再支持python2,所以python3是最好的选择。在终端中执行下面的命令:

brew install python3

安装成功后尝试执行一下以下命令:

python3 --version
Python 3.6.2

很好,Python已经启动并运行了。下一步:虚拟环境!

安装 Virtualenv

下一步,我们将使用pip(一个管理和安装Python包的工具)来安装virtualenv。pip本身是python2.x版本的包管理工具,在python 3.x以上版本中,我们要使用pip3来执行下面的命令:

sudo pip3 install virtualenv

到目前为止,我们执行的安装是全系统的。从现在起,我们安装的一切,包括Django本身,都将安装在虚拟环境中。

可以这样想:对于您启动的每个Django项目,您将首先为它创建一个虚拟环境。就像每个Django项目都有一个沙盒。在这个沙盒里你可以任意读写文件,安装软件包,卸载软件包而不会影响到沙盒外。

我喜欢在我的个人电脑上创建一个名为Development的文件夹。然后,我用它来组织我所有的项目和网站。如果你愿意的话可以按照下面的步骤创建目录,你也可以按照你自己的习惯管理项目文件。

通常,我首先在我的开发文件夹中创建一个项目名称的新文件夹。因为这将是我们的第一个项目,我们不需要选择一个花哨的名字或任何东西。现在,我们可以称之为myproject。

mkdir myproject
cd myproject

这个文件夹是一个更高级别的目录,它将存储与Django项目相关的所有文件和东西,包括它的虚拟环境。

因此,让我们从创建我们的第一个虚拟环境并安装Django开始。

在myproject文件夹中执行下面的命令:

virtualenv venv -p python3

我们的虚拟环境已经创建好了。注意在开始使用之前,需要我们主动激活虚拟环境:

source venv/bin/activate

当虚拟环境被激活后,你会看到(venv)这样的关键字:

让我们试着弄清楚这里发生了什么。我们创建了一个名为venv的特殊文件夹。它在这个文件夹中包含Python的副本。激活venv环境之后,当我们运行python命令时,它将使用存储在venv中的本地副本,而不是我们先前安装的另一个副本。

另一个重要的事情是确认pip程序也已经安装好了,当我们使用它来安装Python包(比如Django)时,将被安装在venv环境中。

如果需要退出venv环境,执行下面的命令即可:

deactivate

这里不需要执行devactive,我们继续在venv环境里安装Django.

安装 Django

venv激活的情况下,直接执行下面的命令来安装Django:

pip install django

安装完成,我们可以开始使用Django啦!

安装完成,让我们开始干活

创建一个新项目

执行下面的命令来创建新项目,项目名称自定义,我们这里用myproject:

django-admin startproject myproject

Django内置安装了命令行工具django-admin,我们可以直接使用

在我们运行上面的命令之后,它将为Django项目生成基本文件夹结构。

现在,我们的myproject目录如下所示:

myproject/                  <-- 更高一级的文件夹
 |-- myproject/             <-- django 项目文件夹
 |    |-- myproject/
 |    |    |-- __init__.py
 |    |    |-- settings.py
 |    |    |-- urls.py
 |    |    |-- wsgi.py
 |    +-- manage.py
 +-- venv/                  <-- 虚拟环境的文件夹

我们最初的项目结构由五个文件组成:

  • manage.py:使用django-admin工具的快捷方式。它用于运行与我们的项目相关的管理命令。我们将使用它来运行开发服务器、运行测试、创建迁移等等。

  • init.py:这个空文件告诉Python这个文件夹是一个Python包。

  • settings.py:此文件包含项目的所有配置。我们会一直引用这个文件!

  • urls.py:此文件负责映射项目中的路由和路径。例如,如果要在URL/about/中显示某些内容,则必须先将其映射到此处。

  • wsgi.py:此文件是用于部署的简单网关接口,现在暂时还不会用到,后面部署时会涉及到。

Django可以非常简便地启动本地web服务器。它在开发过程中非常方便,因此我们不必安装任何其他东西来在本地运行项目。我们可以通过执行以下命令进行测试:

python manage.py runserver

现在我们先忽略迁移报错信息(这个稍后讨论)。在Web浏览器中打开以下URL:http://127.0.0.1:8000,您应该看到以下页面:

Welcome to Django

Django 应用(Apps)

在Django框架中,我们需要注意下面这两个重要的概念:

  • app: 是一个Web应用程序。一个应用程序通常由一组模型(数据库表)、视图、模板、测试组成。
  • project:是配置和应用程序的集合。一个项目可以由多个应用程序或单个应用程序组成。

需要注意的是,没有项目就不能运行Django应用程序。像blog这样的简单网站可以完全在一个应用程序中编写,例如可以命名为blog或weblog。

程序设计

这是一种源代码的分类和管理方法。初学者在开始的时候判断什么是应用程序、如何组织代码并不是很容易。我们先跳过这个!首先让我们熟悉一下Django的API和基本原理。

好吧!为了说明这一点,让我们创建一个简单的Web论坛。要创建我们的第一个应用程序,请转到manage.py文件是并执行以下命令:

django-admin startapp boards

注意这一次我们使用的命令是startapp。它会为我们创建应用程序的目录,现在我们的目录结构应该是如下:

myproject/
 |-- myproject/
 |    |-- boards/                <-- 新建的Django应用程序!
 |    |    |-- migrations/
 |    |    |    +-- __init__.py
 |    |    |-- __init__.py
 |    |    |-- admin.py
 |    |    |-- apps.py
 |    |    |-- models.py
 |    |    |-- tests.py
 |    |    +-- views.py
 |    |-- myproject/
 |    |    |-- __init__.py
 |    |    |-- settings.py
 |    |    |-- urls.py
 |    |    |-- wsgi.py
 |    +-- manage.py
 +-- venv/

我们先来看看每一个文件的作用:

  • migrations/: 在这里,Django存储一些文件来跟踪您在models.py文件,以便保存数据库和models.py同步。
  • admin.py: 这是一个名为Django Admin的内置Django应用程序的配置文件.
  • apps.py: 这是应用程序本身的配置文件。
  • models.py: 这里是我们定义Web应用程序实体的地方。模型由Django自动转换成数据库表
  • tests.py: 此文件用于编写应用程序的单元测试。
  • views.py: 这是我们处理Web应用程序的请求/响应周期的文件。

现在我们已经创建了我们的第一个应用程序,让我们配置我们的项目使用它。

打开settings.py,找到INSTALLED_APPS这个变量:

settings.py

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

从上面可以看出,Django已经安装了6个内置应用程序。它们提供了大多数Web应用程序需要的常见功能,如身份验证、会话、静态文件管理(图像、javascripts、css等)等等。

我们将在接下来的教程中来探讨这些应用程序。但现在,我们先暂时忽略他们。创建我们的boards应用程序,并添加到INSTALLED_APPS中:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    'boards',
]

这里使用的是上面的漫画插图中的正方形和圆形的设计,我们的boards应用程序是黄色的圆形,django.contrib.admindjango.contrib.auth等应用程序就是图中的红色圆形。


第一个页面 Hello, World!

让我们创建第一个页面view。我们将在下一篇教程中详细探讨它,现在让我们先尝试一下用Django创建一个新页面的效果。

打开boards应用程序目录下的views.py并添加如下代码:

views.py

from django.http import HttpResponse

def home(request):
    return HttpResponse('Hello, World!')

views.py中的定义的是接收HttpRequest对象并返回HttpResponse对象的Python函数。必须记住的这个流程!让我们先定义一个home并返回一个消息Hello, World!

接着我们需要告诉Django什么时候去响应这个视图函数。它是由urls.py来实现的,让我们打开这个目录下的urls.py文件:

<details>
<summary>原始版本</summary>
原始的urls.py

from django.conf.urls import url
from django.contrib import admin

from boards import views

urlpatterns = [
    url(r'^$', views.home, name='home'),
    url(r'^admin/', admin.site.urls),
]

</details>

修订版本的urls.py

from django.urls import re_path
from django.contrib import admin

from boards import views

urlpatterns = [
    re_path(r'^$', views.home, name='home'),
    re_path(r'^admin/', admin.site.urls),
]

注意上面我们添加了几行代码:首先从boards中引入了views,python中引入的写法是from boards import views;然后我们在urlpatterns中新增了一行re_path(r'^$', views.home, name='home')

我们先不讨论这几行代码的作用,这个将在后面的教程中详细探讨。

在这里,Django通过正则匹配去查询我们的home页面,这里使用的正则是^$,它匹配的是空字符串,对应的路径地址是:http://127.0.0.1:8000。如果需要将首页的URL改为http://127.0.0.1:8000/homepage/,那么正则匹配就应该改为re_path(r'^homepage/$', views.home, name='home')

让我们试试它的效果。

python manage.py runserver

在浏览器中我们输入http://127.0.0.1:8000

Hello, World!

成功了,你创建了你的第一个页面。


小结

这是本系列教程的第一部分。在本教程中,我们学习了如何安装最新的Python版本以及如何设置开发环境。我们还介绍了虚拟环境,并开始了我们的第一个Django项目,并且已经创建了我们的初始应用程序。

为了让我们保持一致,我在GitHub上提供了源代码。项目的当前状态可以在发布标签v0.1-lw下找到。下面的链接将带您找到正确的位置:github地址

译者注:为了适配新版本的python3,对部分代码进行了修改,原文可以查看原文地址

下一节:Django初学者入门指南2-基础知识(译&改)

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