zoukankan      html  css  js  c++  java
  • 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示例:

     1 from django.conf.urls import url
     2 
     3 from . import views
     4 
     5 urlpatterns = [
     6 url(r'^articles/2003/$', views.special_case_2003),
     7 url(r'^articles/([0-9]{4})/$', views.year_archive),
     8 url(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive),
     9 url(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$', views.article_detail),
    10 ]

    说明:
    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} 只会匹配整数字符串。


  • 相关阅读:
    ORACLE 日期格式
    Oracle 12c release 2的安装
    InstantClient+PLSQL安装配置教程
    POSTMAN打印日志与json文件传参
    POSTMAN Request的几个要素
    Python+selenium处理滚动条
    Keys 类键盘操作的常用方法
    ActionChains类鼠标操作的常用方法
    Python+webdriver 文件上传自动化
    【SDOI2011】染色
  • 原文地址:https://www.cnblogs.com/doitjust/p/9085449.html
Copyright © 2011-2022 走看看