本文使用Pycharm、Django 2.0.9、Python 3.6环境,本文大纲

  • 建立Django项目
  • 建立页面
  • 什么是URLconf和ROOT_URLCONF
  • Django怎么处理URL请求
  • 关于URL尾部的“/” 反斜线

1. 建立一个Django项目

Application name如果填写会自动帮你建立一个APP,而且APP是必须的,就算你用命令行去创建一个项目也需要再次使用命令创建APP。勾选Enable Django admin,这个后面也会用到。下面是默认的结构。

我们先把下面的内容注释掉,因为还用不到数据库。

启动你的项目

点击链接你会看到下面的内容

2. 你的第一个页面

再次启动项目,不过这次你点击以后会出现404错误,你在URL中输入,将会看到你所期待的页面。

这时候你可能有一些疑问,我必须要输入/hello么,如果我需要输入127.0.0.1:8000就直接看到Hello world页面怎么办?毕竟网站都是有一个默认主页不想输入下一级?这时候我们就需要修改URL配置了。

这时候无论你是否输入/hello都会显示这个页面,如下图

URL中什么都不加也就是网站的根目录其实也根配置其他URL一样需要些一个匹配模式,这个模式就是空。可能细心的同学发现我这里的URL匹配模式中没有了^和$,包括网站根目录也仅仅是一对引号而不是之前的’^$’这种形式。这是在Django 2.0开始发生的变化,2.0以前都是需要加^和$的。但是这里有个问题这里的URL不是正则类型的不是正则就很容易匹配到多个,如果我想使用正则类型的怎么办?看下图:

同样还是主页,这里我们用了正则的写法效果还是一样的,这个写法就和Django 1.x里面一样了,只是这里用了re_path,而且在Django 2.x中要想使用支持正则的URL匹配必须使用这个。

现在我们要讨论几个问题

2.1 什么是URLconf和ROOT_URLCONF

一个URL配置文件也就是上面这样的,用于配置URL匹配模式的文件就是URLconf。那什么是ROOT_URLCONF呢?

在项目层级的settings.py文件中有一个ROOT_URLCONF配置选项,这个选项又指向了默认项目层级自动生成的urls.py这个URLconf文件。其实这个ROOT_URLCONF就是告诉DJANGO从哪里开始去找匹配你输入的URL的匹配模式,当第一个匹配到之后就执行对应的动作。如果一直找不到就返回404.

2.2 Django是怎么处理请求的呢

比如你输入 http://127.0.0.1:8000/hello的时候它怎么就能返回你所期待的内容呢?其实就像上面的ROOT_URLCONF说的那样,它指向了一个包含URL匹配模式得URL配置文件,这些文件同时还可以再包含其他URL配置文件,那么Django就从ROOT_URLCONF配置的地方开始加载URL配置文件,然后逐一去匹配,找到第一个匹配的就执行对应的动作,如果找不到就返回404.

当输入/hello时就匹配到了这条,然后去执行hello这个函数,这个函数定义在mysite.views中

这个函数要执行的具体内容是做一个HTTP响应,返回内容是Hello world。就是这样一个过程。简单一句话URL的配置就是把HTTP请求中的URL映射到具体的Python函数上。

直白一点说请求/hello Django将会调用mysite.views.hello(request),如果有参数,参数也会被传递进来,至于参数怎么传递之后在介绍。

2.3 关于URL尾部的“/”

这个“/”是必须的吗?我好像输入URL时也没有输入这个它自己怎么就给我加上了呢。对于URL来说末尾有没有“/”无所谓,但是到底需不需要是你自己来决定的。默认情况下虽然你不输入“/”django会自动给你加上,但至于能不能访问到你期望的内容就要看你的URL配置是怎样的。

我们的URL配置是这样的 “hello/” 而且Django默认会自动在末尾增加“/”如果你没输入的话,所以这种情况下你在浏览器中是否输入“/”都会访问到你所期待的网页。但如果你这个时候把你URL配置更改一下如下图:(去掉“/”)

这时候由于django默认自动在末尾增加“/”所以这时候你就看不到那个页面了,将会得到404.

为什么会这样呢?很显然 http://127.0.0.1:8000/hello 和 http://127.0.0.1:8000/hello/ 是两个URL,后者无法被URL配置文件匹配到啊,所以你看它给你的提示第三项就说的很明白了。如果我就不想要这个“/”那应该怎么办呢?修改settings.py文件,怎讲下面的内容就禁止自动在末尾增加“/”。

这时候你再访问http://127.0.0.1:8000/hello 这个URL就可以访问到了。

但是如果你这时候访问http://127.0.0.1:8000/hello/ 这个就会得到404,为什么?匹配不到啊。我们再次修改一下URL配置

views.py中增加一个方法

再次访问

所以URL配置中的URL末尾是否包含“/”则是根据喜好都可以。不过根据REST原则“/”只表示分级无特殊意义,所以在URL末尾不建议增加“/”.不过对于传统WEB页面来说加与不加都表示同一资源也就是显示同一结果,所以django才会自动默认加上“/”。

REST AP设计

2.4 难道所有的URL配置都写在默认的urls.py文件中吗?

显然不是这就用到一个include函数了。通常情况下每一个APP都有自己的URL配置文件。

mysite是我们的APP,它下面并没有配置URL的地方, 其实URL配置文件就是一个.py文件没有什么特殊的,我们手动建立一个就行。

空空如也的文件,需要写什么呢?照猫画虎,参照之前那个默认生成的urls.py就可以。先说一下需求,所有关于mysite这个APP的URL全部在APP里面的URL配置文件中配置。我们先看这个我们新建的URL配置怎么写:

修改默认的url.py文件

到这里就修改完毕。结果就是输入 http://127.0.0.1:8000 结果不变还是我们定义的主页,然后 http://127.0.0.1:8000/mysite/hello  则显示mysite.views.hello函数执行结果。如下图:

虽然上面两个URL显示结果一样(因为执行的都是相同的东西),但我们的目的是为了说明URL的引入以及不同APP的URL应该在APP里面设置而不是都写到默认生成的urls.py文件中。

Include()函数的作用就是允许引入其他的URLconf设置,当Django遇到带有include()的URL匹配是,如果匹配到那么它会截断匹配的内容将剩余的字符串发送到include()里面的URL配置中继续匹配。

http://127.0.0.1:8000/mysite/hello 在默认的URL配置文件中匹配到/mysite/就截断,然后将hello发送到mystie里面的urls.py去继续匹配。

转载于:https://www.cnblogs.com/rexcheny/p/9635647.html

你的第一个Django程序相关推荐

  1. 学点简单的Django之第一个Django程序

    学点简单的Django之第一个Django程序 这里采用PyCharm专业版可以直接创建Django项目,这里面自动部署了Django的基本环境.在创建项目时选择Django项目: 第一次建立Djan ...

  2. Django学习笔记(一):第一个django程序

    1.创建和运行 django-admin startproject xxx python manage.py runserver 2.第一个项目程序 wsgi.py 中文名:python服务器网关接口 ...

  3. Django|编写第一个Django程序|Writting your first Django app|Windows环境

    目录 1.Django官网:The web framework for perfectionists with deadlines | Django 2.django的安装 一.未安装 二.已安装dj ...

  4. 编写你的第一个 Django 应用,第 5 部分

    Hello,我是 Alex 007,一个热爱计算机编程和硬件设计的小白,为啥是007呢?因为叫 Alex 的人太多了,再加上每天007的生活,Alex 007就诞生了. 我们在前几章成功的构建了一个在 ...

  5. django 1.8 官方文档翻译: 1-2-4 编写你的第一个Django应用,第4部分

    编写你的第一个 Django 程序 第4部分 本教程上接 教程 第3部分 .我们将 继续开发 Web-poll 应用并且关注在处理简单的窗体和优化我们的代码. 编写一个简单的窗体 让我们把在上一篇教程 ...

  6. django 1.8 官方文档翻译: 1-2-3 编写你的第一个Django应用,第3部分

    编写你的第一个 Django 程序 第3部分 本教程上接 教程 第2部分 .我们将继续 开发 Web-poll 应用并且专注在创建公共界面 – "视图 (views )". 哲理 ...

  7. django 1.8 官方文档翻译: 1-2-2 编写你的第一个Django应用,第2部分

    编写你的第一个 Django 程序 第2部分 本教程上接 教程 第1部分 . 我们将继续开发 Web-poll 应用,并且专注在 Django 的 自动生成的管理网站上. 哲理 为你的员工或客户生成添 ...

  8. django 1.8 官方文档翻译: 1-2-1 编写你的第一个Django应用,第1部分

    编写你的第一个 Django 程序 第1部分 让我们通过例子来学习. 在本教程中,我们将引导您创建一个基本的投票应用. 它将包含两部分: 一个公共网站,可让人们查看投票的结果和让他们进行投票. 一个管 ...

  9. 第一个Django应用程序_part1

    一.查看Django是否安装 参考文档:https://docs.djangoproject.com/en/1.11/intro/tutorial01/ 如果Django已经安装,可以看到安装的版本号 ...

最新文章

  1. 北京周聪项目客商支付join用法
  2. php管道邮件,php进程通信-PIPE管道通信
  3. proxool配置详解
  4. 【C++深度剖析教程35】函数模板的概念和意义
  5. IE浏览器常见CSS兼容性问题及解决办法
  6. 新增SDK 错误解决办法
  7. 微信小程序登录(包括获取不到unionid的情况)
  8. 基于Vision Transformer的视频哈希检索识别虚假视频
  9. Beyond Compare不能打开*.te文件解决方案
  10. 基础篇——树莓派远程连接工具VNC不显示视频或摄像头画面解决方式
  11. HDU1507 Uncle Tom's Inherited Land*
  12. 现在Web前端工程师年薪区间是多少?
  13. Android iText向pdf模板插入数据和图片
  14. Introduction to Graph Neural Network翻译-第六章 图循环网络
  15. 牛逼,一整套基于Java开发的的区块链系统(附完整源码)
  16. SQL Server高级教程
  17. css修改谷歌浏览器和火狐浏览器的滚动条样式
  18. 27个iOS开源库,让你的开发坐上火箭吧
  19. 完美解决“The identity used to sign the executable is no longer valid.”问题
  20. 浅谈国产ARM遇上低成本FPGA的结合优势,源码自取!

热门文章

  1. 如何对linux文件进行编译,linux编译和执行命令都有哪些?该如何实现?
  2. 怎么使用7zip进行分批压缩_怎么使用钢结构抛丸机对钢结构进行除锈?
  3. CSS中设置border属性为0与none的区别
  4. echarts使用大总结
  5. python2和python3解释器的区别
  6. 个人的博客搭建(持续更新)
  7. Java randomString
  8. hosts 文件与 ipv6
  9. mysql主键异常(冲突)
  10. [课程相关]homework-06