Django 自学笔记兼学习教程第2章第1节——URL与View关系

点击查看教程总目录

参考:how-django-processes-a-request

1- Django处理请求(request)过程

简单概括如下:

  1. 根据ROOT_URLCONF(位于setting.py)选择对应的url解析模块(默认是urls.py
  2. 加载上一步找到的url解析模块(默认是urls.py)查找变量urlpatterns
  3. 按顺序遍历urlpatterns里面的urlpattern,返回第一个匹配requested URL的urlpattern
  4. 上一步匹配成功,Django就会导入并调用urlpattern里面对应的视图view(一般在views.py里面)
  5. 第三步没有找到匹配的,或者寻找的过程中有异常抛出,Django会调用适当的错误处理视图(见error-handling

上面步骤的一些细节补充

  1. urlpattern: 变量urlpatterns里面的元素,称作urlpattern,urlpattern可以通过django.urls.path()函数或django.urls.re_path()函数获得,例如
urlpatterns = [
path('articles/2003/', views.special_case_2003),
re_path(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive),
re_path(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.month_archive),
......
]
  1. 有一些老的教程资源里面urlpattern写成url('articles/2003/', views.special_case_2003)[在开头会from django.conf.urls import url],

    这种写法不推荐使用,django.conf.urls.url()django.urls.re_path()的别名。在将来的版本中,它可能会被弃用.(出自https://docs.djangoproject.com/en/2.2/ref/urls/#url)
  2. 视图view,可以看做一个简单的Python函数,这个方法会根据一个 HttpRequest实例(对应输入参数request),返回一个HttpResponse实例。

    request为视图view一定要有的参数,根据需要,urlpattern也有可能给视图view添加其他输入参数。

PS: 这些细节我们也会在本章后面的一些小节里面详细的讲下

2- 代码示例

urls.py(项目文件夹下)

from django.urls import path
from my_app import views urlpatterns = [
path('hello/', views.hello),
]

views.py(应用my_app文件夹下)

from django.http.response import HttpResponse

def hello(request):
return HttpResponse("Hello")

此时运行项目后,在浏览器打开http://127.0.0.1:8000/hello/页面如下

3- 示例详细过程分析

浏览器访问http://127.0.0.1:8000/hello/的具体步骤如下

首先浏览器部分做的是:

  1. 127.0.0.1:8000/:浏览器通过127.0.0.1这个域名找到对应的服务器(127.0.0.1表示的是本地服务器),

    给这个服务器上8000这个端口号发送访问请求

    hello/: 路径,用于给Django程序匹配urlpattern

Django后台收到这个访问请求后:

  1. Django程序首先去找根据ROOT_URLCONF(位于setting.py)选择对应的url解析模块(默认是urls.py
  2. 加载上一步找到的url解析模块(默认是urls.py)查找变量urlpatterns
  3. 按顺序遍历urlpatterns里面的urlpattern,第一个urlpatternpath('hello/', views.hello),匹配requested URL里的hello/
  4. 匹配成功,Django就会导入并调用urlpattern里面对应的视图view(views.py里的hello方法),返回给浏览器一个HttpResponse("Hello")

参考:https://developer.mozilla.org/zh-CN/docs/Learn/Common_questions/What_is_a_URL

Django笔记&教程 2-1 URL与View关系的更多相关文章

  1. Django笔记&教程 2-2 URL详细匹配规则

    Django 自学笔记兼学习教程第2章第2节--URL详细匹配规则 点击查看教程总目录 本章第一节中我们简单介绍了URL与View关系 简单概括来说,网页请求的url会通过urls.py里面的urlp ...

  2. Django笔记&教程 总目录

    本篇博客只有目录,正文内容在目录章节链接的博客里 除目录本身外,没有链接的章节,说明内容还没开始编辑 本项目笔记仍在不断创作中,还有些内容会根据自身所学不断更新完善 本项目主要为markdwon文档, ...

  3. Django笔记 —— 高级视图和URL配置

    最近在学习Django,打算玩玩网页后台方面的东西,因为一直很好奇但却没怎么接触过.Django对我来说是一个全新的内容,思路想来也是全新的,或许并不能写得很明白,所以大家就凑合着看吧- 本篇笔记(其 ...

  4. Django笔记&教程 2-3 视图(view)函数介绍

    Django 自学笔记兼学习教程第2章第3节--视图(view)函数介绍 点击查看教程总目录 参考文献:https://docs.djangoproject.com/en/2.2/topics/htt ...

  5. Django笔记&教程 7-1 基于类的视图(Class-based views)介绍

    Django 自学笔记兼学习教程第7章第1节--基于类的视图(Class-based views)介绍 点击查看教程总目录 1 介绍 Class-based views (CBVs) are view ...

  6. Django笔记&教程 7-3 拓展CBVs(Class-based views)

    Django 自学笔记兼学习教程第7章第3节--拓展CBVs(Class-based views) 点击查看教程总目录 一般而言,直接使用原生的Class-based views,能展现的样式和内容是 ...

  7. Django笔记&教程 0-2 框架版本与相关工具

    Django 自学笔记兼学习教程第0章第2节-- 框架版本与相关工具 点击查看教程总目录 1 版本 python: 3.6.5 Django: 2.2.11 (有些地方我也会对比下各种版本的区别) 安 ...

  8. Django笔记&教程 1-1 一 新建项目

    Django 自学笔记兼学习教程第1章第1节--一 新建项目 点击查看教程总目录 1- 命令行新建Django项目 新建项目命令(project_name处为项目名) django-admin sta ...

  9. Django笔记&教程 2-4 视图常用

    Django 自学笔记兼学习教程第2章第4节--视图常用 点击查看教程总目录 1 - shortcut 视图函数需要返回一个HttpResponse对象或者其子类对象. 不过很多时候直接手写建立一个H ...

随机推荐

  1. windows中抓包命令,以及保存为多个文件的方法

    本文主要介绍windows中抓包命令,以及保存为多个文件的方法 说一说保存为多个文件存储数据包这个问题的由来,一般如果长时间抓包,有可能需要等上几个小时,因为这个时候抓包的内容都是存放在内存中的,几个 ...

  2. 重修 Tarjan

    Tarjan是谁 Tarjan's SCCs(有向图强连通分量)algorithm 给定⼀个有向图 \(G\),若存在 \(rt\in V\),满⾜从 \(rt\) 出发能到达 \(V\) 中的所有的 ...

  3. SpringBoot配置文件application

    配置文件 SpringBoot使用一个全局的配置文件 , 配置文件名称是固定的,有两种文件格式: application.properties 语法结构 :key=value application. ...

  4. 重学c#系列——字典(十一)

    前言 重学c#系列继续更新,简单看一下字典的源码. 看源码主要是解释一下江湖中的两个传言: 字典foreach 顺序是字典添加的顺序 字典删除元素后,字典顺序将会改变 正文 那么就从实例化开始看起,这 ...

  5. 内网渗透DC-3靶场通关

    个人博客:点我 DC系列共9个靶场,本次来试玩一下DC-3,只有1个flag,下载地址. 下载下来后是 .ova 格式,建议使用vitualbox进行搭建,vmware可能存在兼容性问题.靶场推荐使用 ...

  6. 【UE4 调试】C++ 几种编译方法和小技巧

    编译方法 Visual Studio 2019 编译 默认编译 UnrealVS 快速编译 Editor 编译 一般 vs 编译完后,Editor会跟着热编译(有声音) 如果发现编译后代码没更新到Ed ...

  7. JVM:参数调优

    JVM:参数调优 本笔记是根据bilibili上 尚硅谷 的课程 Java大厂面试题第二季 而做的笔记 前言 查看 JVM 系统默认值:使用 jps 和 jinfo 进行查看 -Xms:初始堆空间 - ...

  8. k8s replicaset controller 分析(3)-expectations 机制分析

    replicaset controller分析 replicaset controller简介 replicaset controller是kube-controller-manager组件中众多控制 ...

  9. [对对子队]会议记录5.21(Scrum Meeting8)

    今天已完成的工作 吴昭邦 ​ 工作内容:调整快进按钮 ​ 相关issue:优化流水线加入物品的动画 ​ 相关签入:feat: 快进图标更换,更改第四关材料位置 朱俊豪 ​ 工作内容:调整场景高度和视角 ...

  10. windows下安装dirmap详细教程

    今天安装一下dirmap,纯小白非常详细的安装过程 1.先去下载dirmap 下载地址:https://github.com/H4ckForJob/dirmap 点这个绿色的code,然后再点下面这个 ...