Django之你的第一个Django应用程序(1)

官方文档:https://docs.djangoproject.com/en/2.0/

创建项目

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

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

$ django-admin startproject mysite

这将mysite在当前目录中创建一个目录。

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

这些文件是:

  • 外部mysite/根目录只是项目的容器。它的名字对Django来说无关紧要; 你可以将它重命名为你喜欢的任何东西。
  • manage.py:一个命令行实用程序,允许您以各种方式与此Django项目进行交互。您可以manage.pydjango-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

您将在命令行中看到以下输出:

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.

July 06, 2018 - 15:50:53
Django version 2.0, using settings 'mysite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

注意

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

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

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

现在服务器正在运行,请使用Web浏览器访问http://127.0.0.1:8000/。你会看到一个“Congratulations!” page, with a rocket taking off. It worked!

创建polls应用

既然你的环境 - 一个“项目” - 已经建立起来,你就可以开始工作了。

您在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代码:

polls/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文件中包含以下代码:

polls/urls.py

from django.urls import path

from . import views

urlpatterns = [
    path('', views.index, name='index'),
]

下一步是将根URLconf指向polls.urls模块。在 mysite/urls.py,添加导入django.urls.includeinclude()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. You’re at the polls index.“,您在index视图中定义的 。

url 函数有四个参数,两个必需参数:regex 正则和 view 视图;两个选项参数:kwargs字典和 name 名字。在这点上,值得再看下这些参数到底是干什么的。

url参数:regex

术语 “regex” 是正则表达式 “regular expression” 的缩写,是匹配字符串的一段语法,像这里例子的是 url 匹配模式。Django 从列表的第一个正则表达式开始,按顺序匹配请求的 URL,直到找到与之匹配的。

注意,这些正则表达式不会去匹配 GET 和 POST 请求的参数值,或者域名。比如 https://www.example.com/myapp/ 这个请求,URLconf 会找 myapp/https://www.example.com/myapp/?page=3 这个请求,URLconf 同样只会找 mysqpp/

如果你需要正则表达式的帮助,可以看 Wikipedia’s entry 和 关于 re 模块的文档。还有,由 Jeffrey Friedl 写的书 《掌握正则表达式》 也是很棒的。实际上,你并不需要成为正则表达式方面的专家,你真正要会的是如何使用简单捕获模式。因为复杂的正则可能会有不尽人意的查找性能,所以你不太应该全依赖于正则匹配。

最后,一个性能注意点:这些正则表达式在 URLconf 模块加载后的第一时间就被编译了。它们都是非常快的(只要查找的不是特别复杂就像上面举例的)。

url 参数:view

当 Django 发现一个正则表达式匹配时,Django 就会调用指定的视图函数,HttpRequest 对象作为第一个参数,正则表达式捕获的值作为其他参数。如果正则使用简单捕获,值会作为位置参数传递;如果使用命名捕获,值会作为关键字传递。我们稍后会给出一个例子。

url 参数:kwargs

任意的关键字参数都可以作为字典传递到目标视图。但我们不准备在本教程里使用 Django 的这个特性。

url 参数:name

命名你的 URL 可以让你在 Django 的别处明白引用的是什么,特别是在模版里。这个强大的特性允许你在项目里对一个文件操作就能对 URL 模式做全局改变。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值