共计 4701 个字符,预计需要花费 12 分钟才能阅读完成。
写在后面
该系列为读者首次翻译 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 version | Python versions |
---|---|
1.11 | 2.7,3.4,3.5,3.6,3.7(added in 1.11.17) |
2.0 | 3.4,3.5,3.6,3.7 |
2.1 | 3.5,3.6,3.7 |
2.2 | 3.5,3.6,3.7,3.8(added in 2.2.8),3.9(added in 2.2.17) |
3.0 | 3.6,3.7,3.8,3.9(added in 3.0.11) |
3.1 | 3.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 我的项目能够失常运行。cd
到 mysite
文件夹内并运行以下命令
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 HttpResponse
def 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 path
from . import views
urlpatterns = [path('', views.index, name='index'),
]
下一步将 url 根文件配置为 polls.urls
模块,在 mysite/urls.py
文件中,引入模块 django.urls.include
并且在 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()
性能函数容许引入其余 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 格局进行全局更改。