写在后面

该系列为读者首次翻译Django相干技术文档,次要作为学习查阅之用,如有谬误,请斧正,还望海涵!


getting started

第一次应用Django?第一次进行web开发?你来到了正确的中央!立即开始浏览这一章节并开始运行吧!


Django概述

Django是在快节奏的新闻编辑室环境下所开发的,旨在疾速便捷地进行web开发,本文档的目标是通过一些技术细节去理解Django是如何工作的,让咱们立刻开始吧!

编写您的第一个Django app,part 1

让咱们通过示例进行学习。
通过本示例的学习,咱们将疏导你实现一个根本的民意调查利用app的创立工作,它将包含以下两局部。

  • 一个能够查看民心并且进行投票的公共站点
  • 一个容许您增加、扭转、删除民心的治理站点

咱们必须向您再次确认Django installed曾经实现。您能够通过以下命令来确认Django是否装置以及版本。

python -m django --version

如果Django曾经装置,那么您将能够看到版本信息,如果未装置,将会产生谬误"No module named django"。
本次教程撰写是基于Django3.1,反对python3.6及更高版本,如果Django版本不合乎,您能够查看对应版本的Django教程,或者更新Django到最新版本。如果您仍在应用较老版本的python,请确认应用相适应的Django版本。

Django versionPython versions
1.112.7,3.4,3.5,3.6,3.7(added in 1.11.17)
2.03.4,3.5,3.6,3.7
2.13.5,3.6,3.7
2.23.5,3.6,3.7,3.8(added in 2.2.8),3.9(added in 2.2.17)
3.03.6,3.7,3.8,3.9(added in 3.0.11)
3.13.6,3.7,3.8,3.9(added in 3.1.3)
创立我的项目

如果这是您第一次应用Django,您将必须进行一些初始化操作,也就是说您须要主动生成一些代码来搭建Django工程,包含数据库的配置,Django选项配置以及应用程序配置。
关上命令行工具,cd到您心愿存储代码的文件夹下,输出以下命令并运行

django-admin startproject mysite #创立我的项目mysite

这将在以后文件夹下创立一个mysite文件夹。
留神:请防止应用python内置关键词以及django常用词!


代码应该放在何处?

如果您的后端采纳老版的PHP(不应用任何古代框架),您很有可能将代码搁置于web服务器文件夹门路下(比方 /var/www)。在Django框架内并不这样做。因为这样做会产生一些危险,其他人可能通过网络查看您的代码,不利于平安。


startproject命令创立文件夹如下

mysite/    manage.py    mysite/        __init__.py        settings.py        urls.py        asgi.py        wsgi.py

这些文件作用如下:

  • 内部的mysite文件夹是整个我的项目的容器,它的命名不影响Django的运行,因而您凭借爱好任意批改它
  • manage.py:一个命令行实用程序,能够让您通过各种形式与此Django我的项目进行交互。
  • 外部的mysite文件夹是一个该我的项目须要应用的Python扩大包,在您须要引入文件夹内的任何文件时须要应用到它的命名(比方mysite.urls)。
  • mysite/__init__.py:空文件,旨在通知python解释器,该文件夹应被解释为一个python扩大包。
  • mysite/setting.py:此Django我的项目的配置文件。
  • mysite/urls.py:此Django我的项目的Urls门路文件,用于定义url。
  • mysite/asgi.py:为您的Django我的项目提供兼容ASGI的服务器的入口。
  • mysite/wsgi.py:为您的Django我的项目提供兼容WSGI的服务器的入口。
开发服务器

确认您的Django我的项目能够失常运行。cdmysite文件夹内并运行以下命令

python manage.py runserver

您将看到在命令行内看到以下输入


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.
January 22, 2021 - 15:50:53
Django version 3.1, using settings 'mysite.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CONTROL-C.


通过这一行命令,一个纯正由python编写的Django开发服务器开始运行,之所以蕴含这样一个性能是为了使得开发更加迅速,因为不须要进行服务器的配置,比方Apache服务器——直到您筹备好将我的项目使用到理论产品中。

留神:请不要将本开发服务器运行到理论经营产品中,(咱们在web框架畛域是业余的!而非在服务器畛域!)

当初服务器曾经开始运行,通过web浏览器拜访http://127.0.0.1:8000/,您将会看到一个"Congratulations"界面,服务器失常运行!


扭转端口

runserver命令默认在8000端口运行开发服务器。
如果您想扭转端口,退出一个命令行参数即可,示例如下,服务器运行在8080端口

python manage.py runserver 8080

如果您想扭转服务器IP地址,将IP地址与端口一起传递到参数中即可,示例如下,能够监听所有能拜访到该IP地址的web申请。

python manage.py runserver 0:8000

其中0是0.0.0.0的简写模式。


主动重载服务器

开发服务器将会依据须要对于每一次web申请从新加载python代码。也就是说当您更改代码后无需重启服务器。然而有一些操作比方增加文件并不会引起服务器重载,因而须要在实现更改操作后重启服务器。


创立民意调查app

当初我的项目环境曾经准备就绪!
您在Django中编写的每个应用程序都蕴含一个遵循特定约定的Python包。Django附带了一个实用程序,该实用程序会主动生成应用程序的根本目录构造,因而您能够专一于编写代码而不是创立目录。


projects 与 apps

projects与apps之间有什么不同?app是一个能够实现肯定性能的网络应用程序——比方网络博客零碎、公共记录数据库或者一个小型的民意调查app。而project是针对一个特定网站的一系列app及其配置的汇合,一个project能够蕴含多个apps,一个app能够存在于多个projects。


您的apps能够存在于python门路下任何中央。在本例教程中,咱们创立的poll app与manage.py处于同一目录,可作为顶层模块间接引入。
请确认manage.py处于当前目录,并运行以下命令

python manage.py startapp polls

该命令将会创立一个名为polls的文件夹,构造如下

polls/    __init__.py    admin.py    apps.py    migrations/        __init__.py    models.py    tests.py    views.py
编写您的第一个view文件

当初开始编写第一个view文件。关上文件polls/views.py并且写入以下python代码。

from django.http import HttpResponsedef index(request):    return HttpResponse("Hello, world. You're at the polls index.")

这是一个最简略的视图函数,为了调用该函数,咱们须要将其映射到一个URL——因而须要进行URL配置。
首先创立urls.py文件,您的app目录树该当如下所示。

polls/    __init__.py    admin.py    apps.py    migrations/        __init__.py    models.py    tests.py    urls.py    views.py

polls/urls.py中写入以下代码

from django.urls import pathfrom . import viewsurlpatterns = [    path('', views.index, name='index'),]

下一步将url根文件配置为polls.urls模块,在mysite/urls.py文件中,引入模块django.urls.include并且在urlpatterns列表中插入include(),具体如下所示。

from django.contrib import adminfrom django.urls import include, pathurlpatterns = [    path('polls/', include('polls.urls')),    path('admin/', admin.site.urls),]

include()性能函数容许引入其余url配置文件,无论什么时候Django引入了include(),都会将此处作一个宰割,残余的字符串发送到所蕴含的URLconf中进行进一步解决。
include()办法能够很好地实现网址即插即用。polls中的网址配置在文件polls/urls中,它们能够搁置在"/polls/","/content/polls/"或者其余门路下,应用程序仍然能够很好地运行。


什么时候应用include()?

您应该在蕴含其余网址格局时应用include()admin.site.urls是惟一一个例外。


当初您曾经将index视图函数映射到url地址中,用以下命令确认它曾经失常运行。

python manage.py runserver

在浏览器中进入网址http://localhost:8000/polls/,您将看到"Hello,world.You're at the polls index",这是您在index视图函数中所定义的。

path() 参数:route
门路是一个蕴含URL格局的字符串。每当解决申请时,Django会在urlpatterns列表中顺次寻找匹配申请的网址门路,并且只会匹配一次。
门路格局并不会搜寻GET和POST参数。比如说申请地址https://www. example.com/myapp/,门路配置文件会寻找myapp/门路所对应的视图文件,申请地址https://www. example.com/myapp/?page=3,门路配置文件依旧会寻找myapp/
path() 参数:view
每当Django找到一个匹配的门路,将会调用一个以HttpRequest对象作为第一个参数的视图函数,其余捕捉值将作为关键词参数传递到视图函数中。之后将做一个示例解说。
path() 参数:kwargs
能够在字典中能够将任意关键字参数传递给指标视图。 在本教程中,咱们不会应用Django的此性能。
path() 参数:name
为您的URL命名能够在Django的其余局部,特地是在模板文件中明确地援用它。这项弱小的性能可让您仅更改单个文件的一个参数即可对我的项目的URL格局进行全局更改。