美文网首页
URL调度器

URL调度器

作者: 蝉时雨丶 | 来源:发表于2020-07-07 15:51 被阅读0次

概况

为了给一个应用设计URL,你需要创建一个Python 模块,通常被称为URLconf(URL configuration)。这个模块是纯粹的Python 代码,包含URL 模式(简单的正则表达式)到Python 函数(你的视图)的简单映射。

映射可短可长,随便你。它可以引用其它的映射。而且,因为它是纯粹的Python 代码,它可以动态构造。

Django 还提供根据当前语言翻译URL 的一种方法。更多信息参见 国际化文档

Django 如何处理一个请求

当一个用户请求Django 站点的一个页面,下面是Django 系统决定执行哪个Python 代码使用的算法:
1.Django 确定使用根 URLconf 模块。通常,这是 ROOT_URLCONF 设置的值,但如果传入 HttpRequest 对象拥有 urlconf 属性(通过中间件设置),它的值将被用来代替 ROOT_URLCONF 设置。

2.Django 加载该 Python 模块并寻找可用的 urlpatterns 。它是 django.urls.path() 和(或) django.urls.re_path() 实例的序列(sequence)。

3.Django 会按顺序遍历每个 URL 模式,然后会在所请求的URL匹配到第一个模式后停止,并与 path_info 匹配。

4.一旦有 URL 匹配成功,Djagno 导入并调用相关的视图,这个视图是一个Python 函数(或基于类的视图 class-based view )。视图会获得如下参数:

  • 一个 HttpRequest 实例。

  • 如果匹配的 URL 包含未命名组,那么来自正则表达式中的匹配项将作为位置参数提供。

  • 关键字参数由路径表达式匹配的任何命名部分组成,并由 django.urls.path()django.urls.re_path() 的可选 kwargs 参数中指定的任何参数覆盖。

5.如果没有 URL 被匹配,或者匹配过程中出现了异常,Django 会调用一个适当的错误处理视图。参加下面的错误处理( Error handling )。

例如

下面是一个简单的 URLconf:

from django.urls import path

from . import views

urlpatterns = [
    path('articles/2003/', views.special_case_2003),
    path('articles/<int:year>/', views.year_archive),
    path('articles/<int:year>/<int:month>/', views.month_archive),
    path('articles/<int:year>/<int:month>/<slug:slug>/', views.article_detail),
]

注意:

  • 要从 URL 中取值,使用尖括号。

  • 捕获的值可以选择性地包含转换器类型。比如,使用 <int:name> 来捕获整型参数。如果不包含转换器,则会匹配除了 / 外的任何字符。

  • 这里不需要添加反斜杠,因为每个 URL 都有。比如,应该是 articles 而不是 /articles 。
    一些请求的例子:

  • /articles/2005/03/ 会匹配 URL 列表中的第三项。Django 会调用函数 views.month_archive(request, year=2005, month=3) 。

  • /articles/2003/ would match the first pattern in the list, not the second one, because the patterns are tested in order, and the first one is the first test to pass. Feel free to exploit the ordering to insert special cases like this. Here, Django would call the function views.special_case_2003(request)

  • /articles/2003 would not match any of these patterns, because each pattern requires that the URL end with a slash.

  • /articles/2003/03/building-a-django-site/ 会匹配 URL 列表中的最后一项。Django 会调用函数 views.article_detail(request, year=2003, month=3, slug="building-a-django-site") 。

相关文章

  • url调度器

    当一个用户请求Django 站点的一个页面,下面是Django 系统决定执行哪个Python 代码使用的算法: 1...

  • URL调度器

    概况 为了给一个应用设计URL,你需要创建一个Python 模块,通常被称为URLconf(URL configu...

  • Scrapy的运行机制

    列表项爬虫启动,引擎(Engine)会将起始的url传入到调度器(Scheduler)列表项调度器(Schedul...

  • 简单爬虫架构

    整理笔记,来自imooc课程 整体结构 爬虫调度端 URL管理器 网页下载器 网页解析器 URL管理器 管理待抓取...

  • 爬虫实战

    爬虫介绍 调度器 URL管理器(用来存储待抓取的链接,已经抓取过的链接) 网页下载器(消费URL管理器中待抓取的链...

  • 4.Django路由系统

    Django路由系统 URL调度器Django 允许自由地设计你的URL,不受框架束缚。Django认为,对于高质...

  • 基础爬虫框架

    爬虫调度器:负责统筹其它四个模块的协调工作。 URL管理器:维护已爬取的URL集合和未爬取的URL集合,提供获取新...

  • 爬虫的基本操作

    主要模块 主要由这几部分组成: 爬虫调度端(spider_main): 对爬虫流程进行控制 url管理器(url_...

  • Python3 简单爬虫框架

    目录 爬虫简介 调度器 URL管理器 下载器 解析器 输出器 实例 Demo 简介 爬虫是一段自动抓取互联网信息的...

  • 搜狗词库爬虫(1):基础爬虫架构和爬取词库分类

    基础爬虫架构 基础爬虫框架主要包括五大模块:爬虫调度器、URL管理器、网页下载器、网页解析器、数据存储器。 爬虫调...

网友评论

      本文标题:URL调度器

      本文链接:https://www.haomeiwen.com/subject/ezaaqktx.html