2.3 开始编写你的第一个 Django APP(第一部分)
我们先举个栗子:
通过本文档,我们将帮你轻松处理(walk throuth)创建一个基本投票 APP。
这个APP 有两部分组成:①一个公开的网页,可以让人民看到投票选项并为之投票;②一个 admin 网址,可以让你对投票进行增改删处理
。
然后我们现在已经成功安装了 Django,首先需要现确定 Django 版本: python - m django --version
,过没有安装 django 的话会 报错“No module named django”。
本文件针对 django4.0 撰写,同时支持 3.8 版本及以上。如果版本不适合的话,你需要查询自己对应版本的文档,如果使用老版本的 Python,需要查询适用于 django 的 Python 版本。
帮助查询
如果你有对本文档有问题的话,请查询 FAQgetting help
部分
2.3.1 创建一个项目
如果你是第一次使用 django 的话,需要注意洗衣额初始化设置。即,你需要自动创建一些代码以创建 djan 项目(project)——是 django 实例的一系列设置的集合,包括数据库参数、Django相关的选项以及应用相关设置。
从命令行开始,进入到你想保存代码的文件夹中,运行一下命令
django-admin startproject mysite
复制代码
此时会在当前目录下创建一个叫“mysite”的文件夹,如果没有成功的话查询: Problems running django-admin。
注意:你创建的项目名称应避免 Python 或者 Django 内置命令,尤其是要避免使用;类似于”djano”(与 Django 本身冲突)或者“text”(与Python 内置模块冲突)之类的名称
如果你的背景是平凡而老旧的 PHP 语言(没有使用现代的框架),你可能适应了将代码编写到 web服务文件根路径(如:/var/www)。但以后了 Django 后,你就不必再这样了。将这些 Python 代码放到 web 服务文件根目录并并明智,因为这样有被别人通过 web 访问到你代码的风险,不安全哦。
创建 新建项目的样式
文件介绍:
site/
: 根目录,是你项目的集合文件夹。其名字与 Django 无关,可以更新名字manage.py
: 是一个命令行应用,可以让你以多种方式与 Django 互动,可以从n django-admin and manage.py获得相关信息外部的 mysite/
:文件夹你的项目实际 Python 包,它的名字就是 你会用用来导入所需文件的Python包的名字。
– mysite/__init__.py
: 是一个空文件,可以告诉 Python 这个目录是一个 Python 包。如果你是 Python 新手,可以从Python 官方文档阅读更多关于包的内容
mysite/settings.py
: 为该 Django 项目进行设置(配置),Django settings
或告诉你如何配置的工作mysite/urls.py
:对 Django 项目的 URL 路径的声明, Django-驱动网站的“目录”,更多关于 URL 信息请阅读“URL dispatcher”mysite/asgi.py
:是一个兼容 ASGI网络服务的入口,更多信息“ How to deploy with ASGI”mysite/wsgi.py
: 是一个 兼容WSGI网络服务的入口,更多信息“See How to deploy with WSGI”。
2.3.2 开发服务(the development server)
我们开确认你的 Django 项目可以工作:进入到外部的 mysite 目录下,如果没有进入的话,运行一下命令
python amnage.py sunserver
复制代码
你会看到下列信息的
# 系统显示
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.
May 18, 2021 - 15:50:53
Django version 4.0, using settings 'mysite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
复制代码
注意:忽略应用的数据库迁移警告,我们随后会处理数据库
你已经开始了 Django 开发服务,一个淡村用 Python 写的轻量级的 web 服务。我们已经包括了这些,因此可以可以快速的开发,而不用处理各种配置一个生产服务端(如 Apache),知道你已经准备好用于生产服务。
现在,需要注意的是:在类似生产任何环境下不要使用这个服务端。它仅仅在开发期间使用
(我们现在忙于搭建 web 框架,而不是 web 服务)
现在,这个服务端可以运行了,浏览器访问http://127.0.0.1:8000/ ,你会看到“欢迎”页面同时会有一个火箭正在发射。
服务端运行了!
修改端口(port)
在默认情况下,runserver 命令服务初始 ip 宽口为 8000.
如果你想修改服务端口的话,使用命令行:
python manage.py runserver 8080
复制代码
如果你想修改 IP ,使用命令行
python manage.py runserver 0:8080
复制代码
解释: 监听所有可用公共 IP; 0是 0.0.0.0 缩写,具体信息参照“runserver”
自动重加载 runserver
略
2.3.3 创建 Polls(投票) 应用(app)
现在,你的新环境(项目)已经设置成功,现在可以开始工作了。
你写下的每一个应用都由一个 在某个特定环境下的Python 包组成。Django生来可以为一个 APP 自动生成基本的目录结构,所以你可以专注于写代码,而不是创建文件夹了。
- 项目(project)与应用(APP)的区别
项目与 APP的区别是什么?APP 是一个具有一定功能的web 应用,如 weblog 系统是一个公共记录的数据库,或者是一个小型的投票 APP;project 是针对某个特定网站的汇集了多个配置和app的集合。一个 project 可以有多个 APP,一个 APP 也可以从属于多个项目。
你的 APP只要有 Python 路径就可以运行。在本文档中,我们将创造一个投票应用,这个应用于 manage.py 在统一而目录下,因此,他可以再同等级目录下就可以 import,而不是 mysite 目录下的子习性。
在 manage.py 同一目录下创建 app 的命令行
python manage.py startapp polls
复制代码
这样就创建了一个目录
这个目录就是这个 poll APP 应用的结构。
2.3.4 写下你的第一个视图
让我们写下第一个视图:打开 polls/views.py文件,写下以下代码
from dejang.http import HttpResponse
def insex(request):
return HttpResponse('hello,world. you're ate he polls index.')
复制代码
这个是 Django中最简单的视图了。为了调用这个视图,我们需要将其映射到一个 URL 中;要将其映射到 URL 中,我们,需要配置(URLconf)。
我们在这个投票目录中创建一个叫 url.py 的文件去配置 URL ,然后目录就长这样了。。
polls/urls.py 写入:
# polls/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
]
复制代码
下一步就是讲这个根URL配置指向polls/urls.py文件。在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()函数
其中include()
函数涉及到了其他 URL 配置。只要 Django 遇到了include()
函数,无论是URL的那个部分符合到该店,Django都要砍掉这些部分;同时也会发送剩余的字符串到这个被 include 函数修饰的 URL 配置中,从而进行更进一步处理。
include()
函数的中心思想是将”即插即用(plug-and-play)“的 URL 路径变得容易。由于投票 APP 的路径与 URL 配置在一个目录下,他们可以放在以下任何一个目录下“/polls/”、 “/fun_polls/”、/content/polls/”或者其他任意一个目录,这个APP 都可以工作。
- 何时使用 include()函数:
只要你有其他的 URL 路径,你就应该使用 include()函数,
admin.site.urls
除外
现在你已经为 index 视图的路径安排好了 URL 配置。以下命令行确保是否工作
python manage.py runsever
复制代码
浏览器访问http://localhost:8000/polls/, 然后你会看到“’hello,world. you’re ate he polls index.” 内容。这就是你定义的 index 视图
- 无法发现视图?
如果你发现打不开页面,查看 http://localhost:8000/polls/ ,替换掉 http://localhost:8000/.
path()函数
path()
函数有四个参数,两个是必须参数:View
和 root
,两个可选:kwargs
和 name
- rout 参数:
rout 是一个字符串,内容是一个 URL 路径。当发起一个请求时,Django从urlpatterns的第一个路径开始,与请求的url比对,并从列表中往下查询,知道找到第一个符合要求的路径。
路径并不关注 GET 或者 POST 参数,也不关注域名(domain name)。例如,请求地址是 https://www. example.com/myapp/ ,URL 配置会去查询 myapp/;而请求地址是 www.example.com/myapp/?page… 时,URL 配置也查询 myapp/。
- view 参数
当 Django 找到了满足条件的路径,他通过Httprequest
对象作为第一个参数调用视图函数,然后作为关键字参数捕捉到这个值。
- kwars 参数
字典中的任意个关键字参数都可以传递到目标视图中。本文中暂时先不介绍Django 的这个特征
- name 参数
无论从 Django 的那里,为 URL 命名会让你更明白的去查询它,尤其是模板内部。这个强大的特点,可以让你仅仅x修改(touch)一个文件就在全局范围内修改项目的URL 路径。
当你了解了基本的请求和相应(request and response) 流程,阅读下一章去开始处理数据库。