Django - 将URL映射到视图
URLconf 就像是 Django 所支撑网站的目录。它的本质是 URL 模式以及要为该 URL 模式调
用的视图函数之间的映射表。你就是以这种方式告诉 Django,对于这个 URL 调用这段代码,
对于那个 URL 调用那段代码。但必须记住的是视图函数必须位于 Python 搜索路径之中。
Python 搜索路径
Python 搜索路径 就是使用 import 语句时, Python 所查找的系统目录清单。
举例来说,假定你将 Python 路径设置为
['','/usr/lib/python2.4/site-packages','/home/username/djcode/'] 。如果执行代码
from foo import bar , Python 将会首先在当前目录查找 foo.py 模块( Python 路径第一
项的空字符串表示当前目录)。如果文件不存在, Python 将查找
/usr/lib/python2.4/site-packages/foo.py 文件。如果文件也不存在,它将尝试
/home/username/djcode/foo.py 。最后,如果 这个 文件还不存在,它将引发 ImportError
异常。
如果对了解 Python 搜索路径值感兴趣,可以启动 Python 交互式解释程序,输入 import
sys ,接着输入 print sys.path 。
通常,你不必关心 Python 搜索路径的设置。 Python 和 Django 会在后台自动帮你处理好。
(如果有兴趣了解的话, Python 搜索路径的设置工作是 manage.py 文件的职能之一。 )
执行 django-admin.py startproject 时,该脚本会自动为你建了一份 URLconf(即
urls.py 文件)。让我们编辑一下这份文件。缺省情况下它是下面这个样子:
from django.conf.urls import url
from django.contrib import admin import view urlpatterns = [
url(r'^hello', view.djangoStudy),
url(r'^admin/', admin.site.urls),
url(r'^index/$',view.index)
] # urlpatterns = [
# url(r'^admin/', admin.site.urls),
# ]
当前应该注意是 urlpatterns 变量, Django 期望能从 ROOT_URLCONF 模块中找到它。该变
量定义了 URL 以及用于处理这些 URL 的代码之间的映射关系
r'^index/$' 中的 r 表示'^index/$' 是一个原始字符串。这样一来就可以避免 正则表达式
有过多的转义字符。
不必在 '^index/$'前加斜杠(/)来匹配 /index/ , 因为 Django 会自动在每个表 达式前
添加一个斜杠。乍看起来,这好像有点奇怪,但是 URLconfs 可能由其它的 URLconfs 所引
用, 所以不加前面的斜杠可让事情简单一些。
上箭头 ^ 和美元符号 $ 符号非常重要。上箭头要求表达式对字符串的头部进行匹配,美元
符号则要求表达式对字符串的尾部进行匹配。
最好还是用范例来说明一下这个概念。如果我们用 '^index/' (结尾没有$), 那么以 index/
开始的 任意 URL 都会匹配,比如 /index/foo 和 /index/bar , 不仅仅是 /index/ 。同样的,
如果我们去掉最前面的 ^ ( 'index/$' ), Django 一样会匹配由 index/ 结束的 任意 URL
/index/ ,比如 /foo/bar/index/ 。 因此,我们必须同时用上 ^ 和 $ 来精确匹配 URL
/index/ 。不能多也不能少。
正则表达式
正则表达式 (或 regexes ) 是通用的文本模式匹配的方法。 Django URLconfs 允许你 使用
任意的正则表达式来做强有力的 URL 映射,不过通常你实际上可能只需要使用很少的一 部分
功能。下面就是一些常用通用模式:
Django 是怎么处理请求的
我们必须对刚才所发生的几件事情进行一些说明。它们是运行 Django 开发服务器和构造 Web
页面请求的本质所在。
命令 python manage.py runserver 从同一目录载入文件 settings.py 。 该文件包含了这
个特定的 Django 实例所有的各种可选配置,其中一个最重要的配置就是 ROOT_URLCONF 。
ROOT_URLCONF 告诉 Django 哪个 Python 模块应该用作本网站的 URLconf。
还记得 django-admin.py startproject 创建的文件 settings.py 和 urls.py 吗? 这时
系统自动生成的 settings.py 里 ROOT_URLCONF 默认设置是 urls.py 。
当访问 URL /time/ 时, Django 根据 ROOT_URLCONF 的设置装载 URLconf 。 然后按顺序逐
个匹配 URLconf 里的 URLpatterns,直到找到一个匹配的。当找到这个匹配 的 URLpatterns
就调用相关联的 view 函数,并把 HttpRequest 对象作为第一个参数。 (稍后再给出
HttpRequest 的更多信息)
该 view 函数负责返回一个 HttpResponse 对象。
你现在知道了怎么做一个 Django-powered 页面了,真的很简单,只需要写视图函数并用
URLconfs 把它们和 URLs 对应起来。你可能会认为用一系列正则表达式将 URLs 映射到函数也
许会比较慢,但事实却会让你惊讶。
views 视图
接下来请求的处理就到了.../sign/views.py 中的 index 视图函数
#-*-coding:utf-8-*-
# Time:2017/11/13 17:08
# Author:YangYangJun from django.http import HttpResponse
from django.shortcuts import render def djangoStudy(request):
return HttpResponse('Hello DjangoStudy !') def index(request):
return render(request,'index.html')
视图在我看来, 它在 Django 中非常重要, 是连接页面与数据的中间纽带。 拿登录的例子来讲, 用户在页
面上输入了用户名和密码点击登录。 那么 request 请求会由视图来接收, 如何提取出用户名和密码的数据, 如
何用这些数据去查询数据库, 再如何将登录成功的页面返回给用户, 这些全部由视图层来完成。
Django 如何处理请求: 完整细节
除了刚才所说到的简明 URL-to-view 映射方式之外, Django 在请求处理方面提供了大量的灵
活性
通过 URLconf 解析到哪个视图函数来返回 HttpResponse 可以通过中间件(middleware) 来
短路或者增强。关于中间件的细节将在第十五章详细谈论,这里给出 下图 让你先了解 大
体概念.。
当服务器收到一个 HTTP 请求以后,一个服务器特定的 handler 会创建 HttpRequest 并传递
给下一个组件并处理。
这个 handler 然后调用所有可用的 Request 或者 View 中间件。这些类型的中间件通常是用
来 增强 HttpRequest 对象来对一些特别类型的 request 做些特别处理。只要其中有一个 返
回 HttpResponse ,系统就跳过对视图的处理。
即便是最棒的程序员也会有出错的时候, 这个时候 异常处理中间件(exception middleware) 可以帮你的
大忙。如果一个视图函数抛出异常,控制器会传递给异常处理中间件处理。如果这个 中间件没有返回
HttpResponse ,意味着它不能处理这个异常,这个异常将会再次抛出。
即便是这样,你也不用担心。 Django 包含缺省的视图来生成友好的 404 和 500 回应
(response)。
最后, response middleware 做发送 HttpResponse 给浏览器之前的后处理或者清除 请求
用到的相关资源。
简单实例
新建一个html页面,命名为:index.html, urls和view配置如上图
templates 模板
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Django Page</title>
</head>
<body>
<h1>Hello Django</h1>
</body>
</html>
模板的载体就是我们所熟悉的 Web 页面了, Django 自带的有模板语言。 它的主要作用是如何展示数据,
比如视图层返回的是一个字符串, 要如何显示在页面上; 返回的对象数组要如何显示等。 当然, 为了使页面
更漂亮需要借助前端技术, 比如 CSS、 JavaScript 等。
运行后,结果如图
Django 简单的处理流程
Django - 将URL映射到视图的更多相关文章
- django中“url映射规则”和“服务端响应顺序”
1.django搜索路径 使用 import 语句时,Python 所查找的系统目录清单. 查看方式: import sys print sys.path ...
- Django之url映射
url映射的作用 根据Django的MTV模式,url的映射是根据用户输入或传送而来的url路径,来进行区分去执行相应的view函数来响应用户的操作. url映射的方式 Django项目的创建后,会自 ...
- django的url配置
在一个请求到达的时候,最先达到的就是视图层,然后根据url映射到视图函数.这一部分我们来说明url的配置. 概述 为了给一个应用设计URL,你需要创建一个Python 模块,通常称为URLconf(U ...
- django的url分配和url捕获参数
django的url分配 一般视图模块(views.py)都放在自己所属的app目录下,在app目录下新建路径模块(urls.py),由app目录下的urls.py来分配当前app的路径. 在app目 ...
- django重点url,视图函数,模板语言
django重点url,视图函数,模板语言url 1.django重点url无命名分组:re_path() 2.url第一个参:url未命别名分组就不需要views中参数一定,若命别名(?P<y ...
- Django路由系统---django重点之url映射分发
django重点之url映射分发 在全局项目的urls.py中进行子项目的映射,然后在子项目中创建一个urls.py去处理自己项目中的请求,同时也实现了代码的解耦 添加路由分发的原则[全局urls.p ...
- 创建Django项目(五)——URL配置和视图
2013-08-07 20:02:10| 1.新建blog的URL文件 在blog目录下新建文件"urls.py" : # -*- coding: ...
- Django的URL调度
1.URLconf (URL configuration):(Django版本1.11.20,其它版本可能各有差异.) 在Django中Python后端与前端URL进行交互,是通过一个名为urlcon ...
- Django基础(路由、视图、模板)
目录导航 Django 路由控制 Django 视图层 Django 模版层 Django 路由控制 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用 ...
随机推荐
- ionic 实现微信朋友圈分享的完整开发流程
最近开始要着手负责开发ionic的项目了,一直很好奇想实现一个微信朋友圈分享的功能,所以我就网上找了找文章来练手实现,果不其然,找到了几篇,但是发现它们的流程都不太详细,清楚,直接,还有不少坑. 今天 ...
- 细谈 Web Api 图片上传,在使用 Task.ContinueWith 变量无法赋值问题的解决办法!
在使用Asp.Net Web Api 图片上传接口的时候,到网上找了一些个例子,但大多数找到都是这个版本! [HttpPost] public Task<Hashtable> ImgUpl ...
- webstorm 安装与基本使用
1.1 webstorm 安装与配置 1.安装: https://blog.csdn.net/jiangxinyu50/article/details/79104016 2.使用: https://w ...
- MYSQL之MHA集群
环境 manager 192.168.137.141 master1 192.168.137.144 master2 192.168.137.145 slave 192.168.137.141 vip ...
- EGIT
https://jingyan.baidu.com/article/64d05a0262f013de55f73bcc.html
- Linux 系统/etc/profile 内配置 系统脚本命令
背景 在Linux系统下,我们需要利用脚本命令启动一个进程的时候,需要先找到找到启动文件,然后再启动.比如服务器上安装了一个was应用服务器,我们需要每次启动服务器都需要使用如下命令: sh was ...
- Manjaro kde 18.0安装与基本配置
目录 更换源镜像.更新系统 安装搜狗输入法 安装软件 系统配置 最后清理垃圾 首先用Rufus制作启动U盘安装,设置好时间和日期等 更换源镜像.更新系统 排列源(只选清华源mirrors.tuna.t ...
- 终于记住回车和换行cr lf的来由和含义了 -参考: http://www.cnblogs.com/me115/archive/2011/04/27/2030762.html
回车: carriage return, 是将光标在同一行中, 回到当前行的 行首. 回来的本意就是 返回.. 所以 是同一行的行首. CR 换行: line feed: feed: 饲养(动物); ...
- 全排列+字符串查找|扑克排序|2014年蓝桥杯A组题解析第六题-fishers
标题:扑克序列 A A 2 2 3 3 4 4, 一共4对扑克牌.请你把它们排成一行. 要求:两个A中间有1张牌,两个2之间有2张牌,两个3之间有3张牌,两个4之间有4张牌. 请填写出所有符合要求的排 ...
- Spring Boot源码分析
1.核心: SpringApplication.run(SpringbootdemoApplication.class, args); 内部 2.初始化: new SpringApplication( ...