编写你的第一个Django应用程序,第1部分

我们假设你已经安装了Django。您可以通过在shell提示符中运行以下命令(由$前缀表示)来告知Django已安装以及哪个版本:

/ 
$ python -m django --version
如果安装了Django,您应该会看到安装的版本。如果不是,您将收到错误消息“没有名为django的模块”。

本教程是为Django 2.1编写的,它支持Python 3.5及更高版本。如果Django版本不匹配,您可以使用本页右下角的版本切换器参考您的Django版本的教程,或者将Django更新到最新版本。如果你使用的是旧版本的Python,请检查我可以使用哪些Python版本的Django?找到Django的兼容版本。

有关如何删除旧版本Django并安装较新版本的建议,请参阅如何安装Django。

哪里可以获得帮助:

如果您在阅读本教程时遇到问题,请发送消息给django-users或者通过irc.freenode.net上的#django与其他可能提供帮助的Django用户聊天。

创建项目¶
如果这是你第一次使用Django,你将不得不处理一些初始设置。也就是说,您需要自动生成一些建立Django 项目的代码- Django实例的设置集合,包括数据库配置,Django特定选项和特定于应用程序的设置。

从命令行cd进入要存储代码的目录,然后运行以下命令:

/ 
$ django-admin startproject mysite
这将mysite在当前目录中创建一个目录。如果它不起作用,请参阅运行django-admin的问题。

注意

您需要避免在内置Python或Django组件之后命名项目。特别是,这意味着你应该避免使用像 django(这将与Django本身冲突)或test(与内置Python包冲突)这样的名称。

这段代码应该在哪里生活?

如果您的背景是普通的PHP(不使用现代框架),那么您可能习惯将代码放在Web服务器的文档根目录下(在某个地方/var/www)。使用Django,你不会这样做。将任何此Python代码放在​​Web服务器的文档根目录中并不是一个好主意,因为它可能会使人们可能通过Web查看您的代码。这对安全性不利。

将代码放在文档根目录之外的某个目录中,例如 /home/mycode。

让我们来看看startproject创造了什么:

mysite/
manage.py
mysite/
init.py
settings.py
urls.py
wsgi.py
这些文件是:

外部mysite/根目录只是项目的容器。它的名字对Django来说无关紧要; 你可以将它重命名为你喜欢的任何东西。
manage.py:一个命令行实用程序,允许您以各种方式与此Django项目进行交互。您可以manage.py在django-admin和manage.py中阅读有关的所有详细信息 。
内部mysite/目录是项目的实际Python包。它的名称是您需要用来导入其中任何内容的Python包名称(例如mysite.urls)。
mysite/init.py:一个空文件,告诉Python该目录应该被视为Python包。如果您是Python初学者,请阅读官方Python文档中有关包的更多信息。
mysite/settings.py:此Django项目的设置/配置。 Django设置将告诉您有关设置如何工作的所有信息。
mysite/urls.py:这个Django项目的URL声明; 您的Django支持的站点的“目录”。您可以在URL调度程序中阅读有关URL的更多信息。
mysite/wsgi.py:与WSGI兼容的Web服务器的入口点,用于为您的项目提供服务。有关更多详细信息,请参阅如何使用WSGI进行部署。
开发服务器¶
让我们验证您的Django项目是否有效。mysite如果尚未更改到外部目录,请运行以下命令:

/ 
$ python manage.py runserver
您将在命令行中看到以下输出:

执行系统检查…

系统检查发现没有问题(0静音)。

您有未应用的迁移; 在应用之前,您的应用可能无法正常运行。
运行’python manage.py migrate’以应用它们。

2018年12月20日 - 15:50:53
Django 2.1版,使用设置’mysite.settings’
在http://127.0.0.1:8000/启动开发服务器
使用CONTROL-C退出服务器。
注意

暂时忽略有关未应用数据库迁移的警告; 我们很快就会处理数据库。

您已经启动了Django开发服务器,这是一个纯粹用Python编写的轻量级Web服务器。我们已经将它包含在Django中,因此您可以快速开发,而无需处理配置生产服务器(如Apache),直到您准备好进行生产。

现在是时候注意了:不要在类似生产环境的任何地方使用这个服务器。它仅用于开发时使用。(我们的业务是制作Web框架,而不是Web服务器。)

现在服务器正在运行,请使用Web浏览器访问http://127.0.0.1:8000/。你会看到一个“祝贺!”页面,火箭起飞。有效!

改变端口

默认情况下,该runserver命令在端口8000的内部IP上启动开发服务器。

如果要更改服务器的端口,请将其作为命令行参数传递。例如,此命令在端口8080上启动服务器:

/ 
$ python manage.py runserver 8080
如果要更改服务器的IP,请将其与端口一起传递。例如,要监听所有可用的公共IP(如果您正在运行Vagrant或想要在网络上的其他计算机上展示您的工作,这很有用),请使用:

/ 
$ python manage.py runserver 0:8000
0是0.0.0.0的快捷方式。可以在runserver参考中找到开发服务器的完整文档。

自动重装 runserver

开发服务器根据需要自动为每个请求重新加载Python代码。您无需重新启动服务器即可使代码更改生效。但是,某些操作(如添加文件)不会触发重新启动,因此在这些情况下您必须重新启动服务器。

创建民意调查应用¶
既然你的环境 - 一个“项目” - 已经建立起来,你就可以开始工作了。

您在Django中编写的每个应用程序都包含一个遵循特定约定的Python包。Django附带了一个实用程序,可以自动生成应用程序的基本目录结构,因此您可以专注于编写代码而不是创建目录。

项目与应用

项目和应用程序之间有什么区别?应用程序是执行某些操作的Web应用程序 - 例如,Weblog系统,公共记录数据库或简单的轮询应用程序。项目是特定网站的配置和应用程序的集合。项目可以包含多个应用程序。一个应用程序可以在多个项目中。

您的应用程序可以存在于Python路径的任何位置。在本教程中,我们将在您的manage.py 文件旁边创建我们的民意调查应用程序,以便可以将其导入为自己的顶级模块,而不是子模块mysite。

要创建应用程序,请确保您与该目录位于同一目录中manage.py 并键入以下命令:

/ 
$ python manage.py startapp polls
那将创建一个目录polls,其布局如下:

polls/
init.py
admin.py
apps.py
migrations/
init.py
models.py
tests.py
views.py
此目录结构将容纳轮询应用程序。

写下你的第一个视图¶
我们来写第一个视图。打开文件polls/views.py 并在其中放入以下Python代码:

民调/的views.py ¶
from django.http import HttpResponse

def index(request):
return HttpResponse(“Hello, world. You’re at the polls index.”)
这是Django中最简单的视图。要调用视图,我们需要将其映射到URL - 为此我们需要一个URLconf。

要在polls目录中创建URLconf,请创建一个名为的文件urls.py。您的app目录现在应该如下所示:

polls/
init.py
admin.py
apps.py
migrations/
init.py
models.py
tests.py
urls.py
views.py
在该polls/urls.py文件中包含以下代码:

民调/的urls.py ¶
from django.urls import path

from . import views

urlpatterns = [
path(’’, views.index, name=‘index’),
]
下一步是将根URLconf指向polls.urls模块。在 mysite/urls.py,添加导入django.urls.include并include()在urlpatterns列表中插入 ,所以你有:

mysite的/的urls.py ¶
from django.contrib import admin
from django.urls import include, path

urlpatterns = [
path(‘polls/’, include(‘polls.urls’)),
path(‘admin/’, admin.site.urls),
]
该include()函数允许引用其他URLconf。每当Django遇到时include(),它都会删除与该点匹配的URL的任何部分,并将剩余的字符串发送到包含的URLconf以进行进一步处理。

背后的想法include()是使即插即用的URL变得容易。由于民意调查位于他们自己的URLconf(polls/urls.py)中,因此可以将它们放在“/ polls /”下,或“/ fun_polls /”下,或“/ content / polls /”下,或任何其他路径根目录下,并且应用仍会工作。

什么时候用 include()

include()当您包含其他URL模式时,应始终使用。 admin.site.urls是唯一的例外。

您现在已将index视图连接到URLconf。让我们验证它是否正常工作,运行以下命令:

/ 
$ python manage.py runserver
在浏览器中转到http:// localhost:8000 / polls /,您应该看到文本“ Hello,world。你在民意调查指数。“,您在index视图中定义的 。

网页未找到?

如果您在此处获得错误页面,请检查您是否要访问 http:// localhost:8000 / polls /而不是http:// localhost:8000 /。

该path()函数传递了四个参数,两个必需: route和view,以及两个可选:kwargs,和name。在这一点上,值得回顾一下这些论点的用途。

path()参数:route¶
route是包含URL模式的字符串。处理请求时,Django从第一个模式开始urlpatterns并沿着列表向下移动,将请求的URL与每个模式进行比较,直到找到匹配的模式。

模式不搜索GET和POST参数或域名。例如,在请求中https://www.example.com/myapp/,URLconf将查找 myapp/。在请求中https://www.example.com/myapp/?page=3,URLconf也会查找myapp/。

path()参数:view¶
当Django找到匹配的模式时,它调用指定的视图函数,其中一个HttpRequest对象作为第一个参数,并且路由中的任何“捕获”值作为关键字参数。我们稍后会给出一个例子。

path()参数:kwargs¶
任意关键字参数可以在字典中传递到目标视图。我们不打算在教程中使用Django的这个功能。

path()参数:name¶
命名您的URL可让您从Django的其他地方明确地引用它,尤其是在模板中。此强大功能允许您在仅触摸单个文件的同时对项目的URL模式进行全局更改。

如果您对基本请求和响应流感到满意,请阅读 本教程的第2部分以开始使用数据库。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值