Django 路由 —— Djangon如何处理一个请求
Django URL路由概述
一个干净优雅的URL方案是高质量Web应用程序中的一个重要细则
Django可以让你设计URL,无论你想要什么,没有框剪限制
要为应用程序设计URL,您可以非正式地创建一个名为URLconf(URL configura URL配置)的Python模块。
这个模块是纯Python代码,是一个简单的Python模式(简单的正则表达式)到Python函数(您的视图)之间的映射。
Djangon如何处理一个请求
当用户从Django服务器站点请求页面时,系统遵循以下算法来确定要执行的Python代码:
1. 首先Django确定要使用的根URLconf模块。通过 ROOT_URLCONF 来设置,具体在 settings.py 配置文件中。
但是如果传入HttpRequest对象具有urlconf属性(由中间件设置),则其值将替换ROOT_URLCONF设置。
2. Django加载该Python模块并查找该变量urlpatterns。这应该是一个Python的django.conf.urls.url()实例列表。
3. Django按顺序运行每个URL模式,并在匹配所请求的URL的第一个URL中停止。
4. 一旦正则表达式匹配,Django将导入并调用给定的视图,这是一个简单的PYthon函数(或基于类的视图)。该视图通过以下参数传递:
- 4.1 一个实例 HttpRequest。
- 4.2 如果匹配的正则表达式没有返回任何命名组,那么来自正则表达式的匹配将作为位置参数提供。
- 4.3 关键字参数由正则表达式匹配的任何命名组组成,由可选kwargs参数中指定的任何参数覆盖django.conf.urls.url()
5. 如果没有正则表达式匹配,或在此过程中的任何一点出现异常,Django将调用适当的错误处理视图。
示例
以下是一个URLconf示例:
from django.conf.urls import url from . import views urlpatterns = [
url(r'^articles/2003/$', views.special_case_2003),
url(r'^articles/([0-9]{4})/$', views.year_archive),
url(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive),
url(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$', views.article_detail),
]
说明:
1. 要从URL捕获一个值,只需要将其括起来
2.没有必要添加一个主要的斜杠,因为每个URL都含有。例如^articles , 不是 ^/articles。
3.正则表达式前面的 'r' 是可选的,但是推荐使用。它告诉Python 这个字符串是一个'raw'(元字符串,字符串中没有任何内容被转义)
请求示例:
/articles/2005/03/ 将匹配列表中的第三个条目。Django会调用views.month_archive(request, '2005', '03')函数
/articles/2005/3/ 不会匹配其中的任何 URL模式 。因为第三个条目中 views.month_archive 月份需要两位数字。
/articles/2003/ 将匹配列表中的第一个个模式,而不是第二个。因为模式是按顺序测试的,第一个模式是 第一个通过测试 的 。像这样可以很随意地插入一些特殊的模式。在这里,Django会调用 views.special_case_2003(request)
/articles/2003 将不匹配这些模式中的任何一个,因为每个模式都要求URL以斜杠结尾。
/articles/2003/03/03/ 将会匹配最后一个模式,Django会调用 views.article_detail(request, '2003', '03', '03') 函数
注意:每个捕获的参数都作为纯Python字符串发送到视图,无论正则表达式匹配的是什么,即使[0-9]{4} 只会匹配整数字符串。
Django 路由 —— Djangon如何处理一个请求的更多相关文章
- Nginx如何处理一个请求
看了下nginx的官方文档,其中nginx如何处理一个请求讲解的很好,现在贴出来分享下.Nginx首先选定由哪一个虚拟主机来处理请求.让我们从一个简单的配置(其中全部3个虚拟主机都在端口*:80上监听 ...
- nginx是如何处理一个请求的(包含https配置)
配置https首先要有ssl证书,这个证书目前阿里有免费的,但如果自己做实验,也是可以自签证书,只不过不受信 openssl genrsa -des3 -out server.key 1024 ...
- [转载]Nginx如何处理一个请求
http://nginx.org/cn/docs/http/request_processing.html 对我的扫盲文章 基于名字的虚拟主机 Nginx首先选定由哪一个虚拟主机来处理请求.让我们从一 ...
- nginx学习笔记(7)Nginx如何处理一个请求---转载
如何防止处理未定义主机名的请求基于域名和IP混合的虚拟主机一个简单PHP站点配置 基于名字的虚拟主机 Nginx首先选定由哪一个虚拟主机来处理请求.让我们从一个简单的配置(其中全部3个虚拟主机都在端口 ...
- Nginx 如何处理一个请求
基于名字的虚拟主机 Nginx首先选定由哪一个虚拟主机来处理请求.让我们从一个简单的配置(其中全部3个虚拟主机都在端口*:80上监听)开始: server { listen 80; server_na ...
- Nginx是如何处理一个请求
首先,nginx在启动时,会解析配置文件,得到需要监听的端口与ip地址,然后在nginx的master进程里面,先初始化好这个监控的socket(创建socket,设置addrreuse等选项,绑定到 ...
- django源码分析——处理请求到wsgi及视图view
本文环境python3.5.2,django1.10.x系列 根据前上一篇runserver的博文,已经分析了本地调试服务器的大致流程,现在我们来分析一下当runserver运行起来后,django框 ...
- python的Web框架:Django路由系统以及模板导入
Django的路由系统 当一个请求来到时 当一个请求来到时 1.首先到项目目录下的urls.py(根URLconf模块)中,查找路由规则: 2.根URELcof模块,里面定义了 urlpatterns ...
- 第2天:Django路由与视图
在应用中创建视图定义路由 配置文件说明 静态文件使用 Django解析路由的流程 路由顺序 路由命名与reverse反推 在应用中创建视图定义路由 前面我们已经创建了子应用users,但是这个user ...
随机推荐
- bzoj3191卡牌游戏——概率DP
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3191 不用在意每个人的编号,只需看他们相对于庄家的位置即可: 所以设计状态f[i][j]为还 ...
- idea类名下有红色波浪线
能编译通过说明SDK导入正确,但是为啥我们点击每一个Java文件会出现好多红色的下划线 ,并提示idea cant resolve symbol 原因就是可能没有清除原来的历史缓存,导致一些错误,解决 ...
- 斯坦福CS231n—深度学习与计算机视觉----学习笔记 课时1
课时1 计算机视觉历史回顾与介绍上 CS231n:这一一门关于计算机视觉的课程,基于一种专用的模型架构,叫做神经网络(更细一点说,是卷积神经网络CNN).计算机视觉是人工智能领域中发展最为迅猛的一个分 ...
- Spherical Harmonics Lighting
[转自:http://www.cnblogs.com/daniagger/archive/2012/05/29/2524133.html] 1.背景知识 1.1 光照表示 之前我们都只考虑光源点和物体 ...
- .net 下webservice 的WebMethod的属性
WebMethod有6个属性: .Description .EnableSession .MessageName .TransactionOption .CacheDuration .BufferRe ...
- 详解Supervisor进程守护监控
Supervisor在百度百科上给的定义是超级用户,监管员.Supervisor是一个进程管理工具,当进程中断的时候Supervisor能自动重新启动它.可以运行在各种类unix的机器上,superv ...
- angular源码剖析之Provider系列--CacheFactoryProvider
CacheFactoryProvider 简介 源码里是这么描述的: Factory that constructs {@link $cacheFactory.Cache Cache} objects ...
- poj 2406 Power Strings【kmp】
kmp,根据next数组的性质如果有答案的话就是n/(n-(ne[n]+1)),否则是1 搬来打算用SA后来发现必须用DC3就没写 #include<iostream> #include& ...
- P4692 [Ynoi2016]谁的梦
传送门 分别考虑每一种颜色对答案的贡献.每种颜色的贡献就是他出现的区间个数,那么可以用总区间减去不包含它的区间个数,把每一个序列里不包含它的区间个数加起来,然后不同序列用乘法原理计算即可 于是我辛辛苦 ...
- Rsync 实现远程同步
介绍 rsync命令是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件.rsync使用所谓的“rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部 ...