你的第一个Django程序

本文使用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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/426851.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

闪电对计算机或网络设备的威胁,计算机网络的雷电防护_计算机网络

摘?要 雷电对计算机网络稳定性造成了很多的危害。雷电主要通过电源线、网络线和接地反击的途径来侵入设备,造成设备损坏。如何来确保设备的安全,本文从网络系统的防护、网络线路的防护、及其防雷工程中需要特别考虑过电压防护几个方面提出了防护措施。关…

分割法和填补法_“聚合”法与“分割”法

一门新的思维与实践的科学“聚合”法是宗脉学中“宗脉”关系的根本原则,这是一门新的思维与实践的科学,它的研究角度和方法都不同于任何以往唯物主义与唯心主义学派。“宗”即是整体,本质,聚和,“脉”是本质的分支与脉…

Python join()方法

描述 Python join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串。 语法 join()方法语法: str.join(sequence) 参数 • sequence – 要连接的元素序列。 返回值 返回通过指定字符连接序列中元素后生成的新字符串。 实例 以下实例展示了join()的使用方…

[USACO 2017 Feb Gold] Tutorial

Link: 传送门 A: 分层图最短路&#xff08;其实就是最短路转移时多记录一维的数据 #include <bits/stdc.h>using namespace std; #define X first #define Y second typedef double db; typedef long long ll; typedef pair<int,int> P; const int MAXN105; int n,…

平板xmind怎么添加父主题_xmind 怎么插入子主题

XMind添加主题方法一&#xff1a;XMind地址&#xff1a;网页链接点击标题栏中的【插入】&#xff0c;在弹出的内下拉窗口中便可看见容主题、子主题、自由主题等选项&#xff0c;我们点击想要添加的主题类型&#xff0c;然后直接点击便会对应的在导图中生成新的空白主题&#xf…

实例34:python

#练习函数调用。 #!/usr/bin/python -- coding: UTF-8 -- def hello_world(): print (‘hello world’) def three_hellos(): for i in range(3): hello_world() if name ‘main’: three_hellos() #1&#xff1a;__name__是一个变量。前后加了下划线是因为是因为这是系统…

NumPy数组创建例程

NumPy - 数组创建例程 新的ndarray对象可以通过任何下列数组创建例程或使用低级ndarray构造函数构造。 numpy.empty 它创建指定形状和dtype的未初始化数组。 它使用以下构造函数&#xff1a; numpy.empty(shape, dtype float, order C)构造器接受下列参数&#xff1a; 序号参…

python做接口自动化测试仪器经销商_Python接口自动化测试的实现

接口测试的方式有很多&#xff0c;比如可以用工具(jmeter,postman)之类&#xff0c;也可以自己写代码进行接口测试&#xff0c;工具的使用相对来说都比较简单&#xff0c;重点是要搞清楚项目接口的协议是什么&#xff0c;然后有针对性的进行选择&#xff0c;甚至当工具不太适合…

计算机进去pe怎么设置用户,电脑密码怎么设置,教您设置电脑开机密码

为了保障电脑重要资料的安全&#xff0c;不被其他同事看到&#xff0c;我们都会给自己的电脑设置开机密码&#xff0c;有了开机密码就可以让别人不能直接使用我们的电脑了&#xff0c;那么电脑开机密码如何设置呢&#xff1f;下面小编给您耐心讲解下电脑开机密码设置方法。说到…

实例35:python

#文本颜色设置 #!/usr/bin/env python -- coding:utf-8 -- Python设置文本文字颜色 class bcolors: HEADER ‘\033[95m’ # pink OKBLUE ‘\033[94m’ # blue OKGREEN ‘\033[92m’ # green WARNING ‘\033[93m’ # yellow FAIL ‘\033[91m’ # red ENDC ‘\033[0m’…

「BZOJ2200」[Usaco2011 Jan] 道路和航线 - 最短路+拓扑排序

->点我进原题[Usaco2011 Jan]道路和航线 Time Limit: 10 Sec Memory Limit: 259 MB Submit: 1116 Solved: 410 Description Farmer John正在一个新的销售区域对他的牛奶销售方案进行调查。他想把牛奶送到T个城镇 (\(1 < T < 25,000\))&#xff0c;编号为\(1\)~\(T\)。…

哈佛大学计算机科学专,哈佛大学计算机科学专业

哈佛大学计算机科学专业通过哈佛文理研究生院申请并统一管理&#xff0c;要求申请者递交GRE成绩&#xff0c;但并无最低GRE分数要求。该项目设有BA/MS、PhD两个项目。所有PhD学生均可以获得全额奖学金&#xff0c;但不向硕士学生发放奖学金。哈佛大学计算机科学专业设置计算机架…

excel亮灯怎么设置_Excel表格技巧—怎么给表格设置密码

很多 Excel 表格里都有一些重要信息&#xff0c;但是当我们给别人发Excel表格时&#xff0c;别人可能会不小心或者故意更改表中数据。怎么才能避免这些表格的数据被更改呢&#xff1f;小编在这里和大家分享一个技巧&#xff1a;给表格设置密码&#xff01;如下图&#xff0c;假…

Collection和Collections的区别是什么

1&#xff09;java.util.Collection是一个集合顶层接口&#xff0c;该接口的设计目的是为各种具体的集合提供最大化的统一的操作方式&#xff0c;它提供了对集合对象进行基本操作的通用接口方法&#xff0c;实现该接口的类主要有List和Set 2&#xff09;java.util.Collections是…

实例36:python

#题目&#xff1a;求100之内的素数。 #!/usr/bin/python -- coding: UTF-8 -- 输出指定范围内的素数 用户输入数据 lower int(input("输入区间最小值: ")) upper int(input("输入区间最大值: ")) for num in range(lower,upper 1): # 素数大于 1 …

南川职业学校计算机职业,2018年重庆五年制大专中职学校介绍——重庆市南川隆化职业中学校...

2021年高职单招升学一对一咨询高职单招王老师:17725052174(微信)2018年重庆五年制大专中职学校介绍——重庆市南川隆化职业中学校什么是五年制大专&#xff1a;五年制大专也称为五年高职或五年一贯制大专&#xff0c;是高等职业技术学院的一种招生模式&#xff0c;学制五年&…

normalize函数_提取棋盘格角点函数解析

点击上方“Qt学视觉”&#xff0c;选择“星标”公众号重磅干货&#xff0c;第一时间送达共同学习共同进步1、如何查阅OpenCV官方说明文档查阅地址&#xff1a;https://docs.opencv.org/4.3.0/我这里使用的是OpenCV4.3&#xff0c;所以我需要查阅的就是4.3版本的说明文档上图就是…

STM32三种启动模式 boot0 boot1

STM32三种启动模式对应的存储介质均是芯片内置的&#xff0c;它们是&#xff1a; 1&#xff09;用户闪存芯片内置的Flash。2&#xff09;SRAM芯片内置的RAM区&#xff0c;就是内存啦。3&#xff09;系统存储器芯片内部一块特定的区域&#xff0c;芯片出厂时在这个区域预置了一段…

实例37:python

#对10个数进行排序。 #!/usr/bin/python -- coding: UTF-8 -- print (‘请输入10个数字:\n’) a[] for n in range(10): a.append(int(input(‘输入一个数字:\n’))) for i in range(0,9): mini for j in range(i1,10): if a[min]>a[j]: minj if min!i: ta[min] a[min]a[i…

南京二本有什么计算机学校,南京有什么好的二本学校?

南京是六朝古都&#xff0c;历史底蕴深厚。南京市高等教育资源丰富。南京市有高校53所&#xff0c;其中本科院校35所&#xff0c;35所&#xff0c;本科院校中&#xff0c;民办本科院校10所&#xff0c;公办本科院校25所。25所公办本科院校中&#xff0c;一本院校占多数&#xf…