Django笔记&教程 2-1 URL与View关系
Django 自学笔记兼学习教程第2章第1节——URL与View关系
点击查看教程总目录
1- Django处理请求(request)过程
简单概括如下:
- 根据
ROOT_URLCONF
(位于setting.py
)选择对应的url解析模块(默认是urls.py
) - 加载上一步找到的url解析模块(默认是
urls.py
)查找变量urlpatterns
- 按顺序遍历
urlpatterns
里面的urlpattern,返回第一个匹配requested URL的urlpattern - 上一步匹配成功,Django就会导入并调用urlpattern里面对应的视图view(一般在
views.py
里面) - 第三步没有找到匹配的,或者寻找的过程中有异常抛出,Django会调用适当的错误处理视图(见error-handling)
上面步骤的一些细节补充:
- 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),
......
]
- 有一些老的教程资源里面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) - 视图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/的具体步骤如下
首先浏览器部分做的是:
- 127.0.0.1:8000/:浏览器通过127.0.0.1这个域名找到对应的服务器(127.0.0.1表示的是本地服务器),
给这个服务器上8000这个端口号发送访问请求
hello/: 路径,用于给Django程序匹配urlpattern
Django后台收到这个访问请求后:
- Django程序首先去找根据
ROOT_URLCONF
(位于setting.py
)选择对应的url解析模块(默认是urls.py
) - 加载上一步找到的url解析模块(默认是
urls.py
)查找变量urlpatterns
- 按顺序遍历
urlpatterns
里面的urlpattern,第一个urlpatternpath('hello/', views.hello),
匹配requested URL里的hello/ - 匹配成功,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关系的更多相关文章
- Django笔记&教程 2-2 URL详细匹配规则
Django 自学笔记兼学习教程第2章第2节--URL详细匹配规则 点击查看教程总目录 本章第一节中我们简单介绍了URL与View关系 简单概括来说,网页请求的url会通过urls.py里面的urlp ...
- Django笔记&教程 总目录
本篇博客只有目录,正文内容在目录章节链接的博客里 除目录本身外,没有链接的章节,说明内容还没开始编辑 本项目笔记仍在不断创作中,还有些内容会根据自身所学不断更新完善 本项目主要为markdwon文档, ...
- Django笔记 —— 高级视图和URL配置
最近在学习Django,打算玩玩网页后台方面的东西,因为一直很好奇但却没怎么接触过.Django对我来说是一个全新的内容,思路想来也是全新的,或许并不能写得很明白,所以大家就凑合着看吧- 本篇笔记(其 ...
- Django笔记&教程 2-3 视图(view)函数介绍
Django 自学笔记兼学习教程第2章第3节--视图(view)函数介绍 点击查看教程总目录 参考文献:https://docs.djangoproject.com/en/2.2/topics/htt ...
- Django笔记&教程 7-1 基于类的视图(Class-based views)介绍
Django 自学笔记兼学习教程第7章第1节--基于类的视图(Class-based views)介绍 点击查看教程总目录 1 介绍 Class-based views (CBVs) are view ...
- Django笔记&教程 7-3 拓展CBVs(Class-based views)
Django 自学笔记兼学习教程第7章第3节--拓展CBVs(Class-based views) 点击查看教程总目录 一般而言,直接使用原生的Class-based views,能展现的样式和内容是 ...
- Django笔记&教程 0-2 框架版本与相关工具
Django 自学笔记兼学习教程第0章第2节-- 框架版本与相关工具 点击查看教程总目录 1 版本 python: 3.6.5 Django: 2.2.11 (有些地方我也会对比下各种版本的区别) 安 ...
- Django笔记&教程 1-1 一 新建项目
Django 自学笔记兼学习教程第1章第1节--一 新建项目 点击查看教程总目录 1- 命令行新建Django项目 新建项目命令(project_name处为项目名) django-admin sta ...
- Django笔记&教程 2-4 视图常用
Django 自学笔记兼学习教程第2章第4节--视图常用 点击查看教程总目录 1 - shortcut 视图函数需要返回一个HttpResponse对象或者其子类对象. 不过很多时候直接手写建立一个H ...
随机推荐
- 揭秘:懂Python的测试员薪资到底有多高?
前言 面试的时候,面试官经常会问:会Python吗?有在工作中写过项目吗?会搭建自己的框架吗?我:恩,我只简单写过一些demo. 有时候问一些简单的Python,一问就会懵.比如:json和字典有什么 ...
- Redux使用指南
Redux使用指南 00-简介 本文主要是用来记录Redux结合React的使用过程,帮助大家在使用Redux的时候,能够更好的理解Redux,从而更好地使用它 01-为什么需要Redux JavaS ...
- 前端规范之Git工作流规范(Husky + Comminilint + Lint-staged)
代码规范是软件开发领域经久不衰的话题,几乎所有工程师在开发过程中都会遇到或思考过这一问题.而随着前端应用的大型化和复杂化,越来越多的前端团队也开始重视代码规范.同样,前段时间,笔者所在的团队也开展了一 ...
- C++核心编程 1 程序的内存模型
1.内存分区模型 C++程序在执行时,将内存大方向划分为4个区域 代码区:存放函数体的二进制代码,由操作系统进行管理(写的所有代码都在代码区) 全局区:存放全局变量.静态变量以及常量 栈 区:由编 ...
- 解决nodejs的npm命令无反应的问题
最近在弄cordova,又要折腾nodejs了. 今天安装cordova模块的时候,看到nodejs的默认模块安装路径在c盘 于是想修改下,按命令 npm config set prefix . 结果 ...
- NOIP 模拟 七十七
100+60+95+30; T4 一个变量打错挂了40.. T1 最大或 考虑从高到低枚举的二进制位,然后和的对应二进制位进行比较.如果两 者相同,那么不论怎么选择,,答案在这个位置上的值一定和在这个 ...
- Sentinel-Go 源码系列(一)|开篇
大家好呀,打算写一个 Go 语言组件源码分析系列,一是为了能学习下 Go 语言,看下别人是怎么写 Go 的,二是也掌握一个组件. 本次选择了 Sentinel-Go,一是对 Java 版本的 Sent ...
- 深入理解Java虚拟机之类加载机制篇
概述 虚拟机把描述类的数据从 Class 文件加载到内存中,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,就是虚拟机的类加载机制. 在Java语言里面,类型的 ...
- vs2010中使用命令行参数
使用VS2010增加命令参数的时候老是不起作用,后面经过研究发现,所要增加的命令参数是一个相对文件路径,而默认的工作目录里面没有该文件,所以就没有找到,需要修改工作目录,这样命令行参数才能够起作用.
- 洛谷 P2120 [ZJOI2007] 仓库建设
链接: P2120 题意: 有 \(n\) 个点依次编号为 \(1\sim n\).给出这 \(n\) 个点的信息,包括位置 \(x_i\),所拥有的的物品数量 \(p_i\),在此建设一个仓库的费用 ...