Django的URL分发器文档翻译

URL 分配器(URL dispatcher)

一个干净、优雅的URL 方案是是设计高质量的Web应用程序中非常重要的一个细节,Django [‘dɡo](发音类似于’粘 狗’、 这套框架是以比利时的吉普赛爵士吉他手Django Reinhardt来命名的,没有其他意思)让你用你想要的任何方式设计URL,并且没有框架结构限制。没有必要用.php或者.cgi,也一定没有(0,2097,1-1-1928,00)这种荒谬的东西。

请参考来自于www的创始人Tim Berners-Lee的一篇文章:Cool URIsdon’t change,在这篇文章里,关于为什么URLs应该是干净和可用的。他给出了一个卓越的理由。

概览

为了给一个应用设计URLs,你随便的创建了一个叫做URLconf的Python模块,也就是URL的配置,这个模块是用纯粹的Python代码写的,并且在URL模式(简单的正则表达式)和Python方法(你的views)之间做了一个简单的映射。

这个映射在需要的地方可长可短,它可以引用其他的映射,因为它是纯Python代码,它可以被动态构建。

Django提供了一种途按照活动的语言(此处还没搞懂,这个应该和python的国际化有关)翻译URLs的途径,详情请见:internationalizationdocumentation

Django是如何处理一个请求的

当用户从你的Django网站请求一个页面的时候,

系统根据下面的运算规则去决定应该执行哪一段Python代码:

  1. Django判断根目录下的URLconf模块并使用,通常来说,设置ROOT_URLCONF的值,但是如果带有urlconf属性(由中间件设置)的HttpRequest的对象进来,那么它的值被替换成ROOT_URLCONF的设置。
  2. Django加载Python模块并查找urlpatterns变量。这应该是一个django.conf.urls.url()实例的Python列表。
  3. Django按顺序运行每个URL模式,并且当匹配到一个URL请求的时候就停止。
  4. 一旦正则表达式被匹配,Django导入并调用给定的view,这个view是一段简单的Python方法的代码,或者是一个基于类的view,这个view传递以下参数:
  5. l  一个HttpRequest实例
  6. l  如果匹配的正则表达式返回一个没有命名的组,那么来自正则表达式的这个匹配将被提供一个位置参数。
  7. l  参数的关键字又任何被正则表达式匹配的命名空间组成,通过重写被kwargs的可选参数指定的任何参数给django.conf.urls.url().传值。
  8. 如果没有正则表达式匹配,或者在任何程序处抛出了异常,Django回调一个合适的错误处理视图,详细请看下面的“异常处理”

举例

请看下面的URLconf样本

fromdjango.conf.urlsimport 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),
]

注意:

  • 从URL中捕获值的时候,请用圆括号扩起来
  • 这里没有必须要求添加一个前导斜线,因为每个URL都有,比如^articles不应该写成^/articles
  • 这个在正则表达式字符串前面的’r’是可选的,但是建议使用上。它告诉Python这个字符串是原生的,在这个字符串中什么都不需要转义。详情请见Dive Into Python’s explanation.
时间: 2024-10-22 07:46:23

Django的URL分发器文档翻译的相关文章

django的url分发封装

url的分发与封装 组件和应用App的区别,组件其不仅服务于当前项目,其还可以服务于其他项目,即可以重复使用, 路由分发的格式,路由器分发path()中第二个参数可以是视图方法,也可以是路由分发,传一个元祖,第一个数据是路径匹配用[]括起来路径,第二,第三个是None,path里面还可以嵌套,即可以分发若干路径 urlpatterns = [ path('admin/', admin.site.urls), re_path('ad/',([ path('test/',test), path('t

Django 笔记 URL 分发原理

做了2个页面,觉得大致了解了参数和页面如何传递了,我们来看下原理. 一个HTTP请求发送到http://127.0.0.1:8000/hello/ Django会第一时间去找setting文件的setting.py ROOT_URLCONF = 'untitled2.urls' 当访问 URL /hello/ 时,Django 根据 ROOT_URLCONF 的设置装载 URLconf . 然后按顺序逐个匹配URLconf里 的URLpatterns,直到找到一个匹配的. 当找到这个匹配 的UR

url分发器

视图一般都写在app的view.py中,并且视图的第一个参数永远是request,视图的返回值必须是HttpResponseBase对象或子类的对象 创建一个app:python manage.py startapp appname views.py视图函数如下 from django.http import HttpResponse # Create your views here. def book(request): return HttpResponse('图书首页') def book

Django开发:(1)django基础 & url控制器

HTTP请求协议 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于万维网(WWW:World Wide Web )服务器与本地浏览器之间传输超文本的传送协议.http协议是基于TCP/IP协议之上的应用层协议 请求协议: 请求方式: get与post请求 1. GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditBook?name=test1&id=123456. POST方法是把提交的数据放在HTT

django url分发,视图,模板回顾

Django基础轮廓 MTV+controller 一 url分发系统: 1 简单使用 url(r'^articles/2003/$', views.special_case_2003), # special_case_2003(request) url(r'^articles/(\d{4})/$', views.year_archive), # year_archive(request,1999) url(r'^articles/(\d{4})/(\d+)$', views.month_arc

Django学习之十一:真正理解Django的路由分发和反解url原理

目录 URL Dispatcher 简介 模式概念 对比URLPattern 与 URLResolver (多态的体现) 构建子路由几种方式 反解url算法逻辑 URL Dispatcher 简介 django的url dispatcher 设计是基于一个url mapper来工作的. 这个url mapper主要用在两个方向: url 匹配到 视图 通过提供的标识,反解出url Django provides a solution such that the URL mapper is the

Django Rest Framework url注册器组件 | 响应器组件 | 分页器组件

文章参考博主:https://www.cnblogs.com/li-li/p/10103918.html 1.url注册器组件 : 通过DRF的视图组件,数据接口逻辑被我们优化到最后剩下一个类,接下来,我们使用DRF的url控制器来帮助我们自动生成url '''3.使用url注册器组件的url''' #导入模块 from rest_framework import routers router = routers.DefaultRouter() # 3.将需要自动生成url的接口注册到route

DjangoRestFramework学习三之认证组件、权限组件、频率组件、url注册器、响应器、分页组件

本节目录 一 认证组件 二 权限组件 三 频率组件 四 URL注册器 五 响应器 六 分页组件 七 xxx 八 xxx 一 认证组件 1. 局部认证组件 我们知道,我们不管路由怎么写的,对应的视图类怎么写的,都会走到dispatch方法,进行分发, 在咱们看的APIView类中的dispatch方法的源码中,有个self.initial(request, *args, **kwargs),那么认证.权限.频率这三个默认组件都在这个方法里面了,如果我们自己没有做这三个组件的配置,那么会使用源码中默

jQuery源码分析系列(33) : AJAX中的前置过滤器和请求分发器

jQuery1.5以后,AJAX模块提供了三个新的方法用于管理.扩展AJAX请求,分别是: 1.前置过滤器 jQuery. ajaxPrefilter 2.请求分发器 jQuery. ajaxTransport, 3.类型转换器 ajaxConvert 源码结构: jQuery.extend({ /** * 前置过滤器 * @type {[type]} */ ajaxPrefilter: addToPrefiltersOrTransports(prefilters), /** * 请求分发器 *