Django之视图和URL配置
1.在创建项目时,Django会自动创建URL配置,在urls.py文件中
文件的默认内容如下所示:
"""mysite URL Configuration
The urlpatterns list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/1.8/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: url(r'^$', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home')
Including another URLconf
1. Add an import: from blog import urls as blog_urls
2. Add a URL to urlpatterns: url(r'^blog/', include(blog_urls))
"""
from django.conf.urls import include, url
from django.contrib import admin
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
]
去掉注释,剩下的都是精华,逐行分析:
- 第一行从 django.conf.urls 模块中导入两个函数:include,用于导入另一个 URL 配置模块;url,使用正则表达式模式匹配浏览器中的 URL,把它映射到 Django 项目中的某个模块上。
- 第二行从 django.contrib 模块中导入 admin 函数。这个函数传给 include 函数,加载 Django 管理后台的 URL。
- 第三行是 urlpatterns,即 url() 实例列表。Django期待URL配置中有urlpatterns这个对象,它负责定义 URL 与处理URL 的代码之间的映射。在 URL 配置中添加 URL 和视图的方式是,把 URL 模式映射到视图函数上。
注意:
- url函数的第一个参数是正则表达式,第二个是视图函数
- 如果我们指定的URL模式要求末尾有/,默认情况下,如果请求的 URL 不匹配任何 URL 模式,而且末尾没有斜线,那么 Django 会把它重定向到末尾带斜线的 URL
- 我们以对象的形式传入视图函数,而没有调用函数
2.Django处理请求的过程
创建Django项目时,自动创建了setting.py文件,保存了当前项目的全部配置,各个配置的名称都是大写,例如TEMPLATE_DIRS,DATABASES等,其中ROOT_URLCONF,指向自动生成的urls.py,它告诉Django,网站的URL配置在哪个Python模块。收到针对某个 URL的请求时,Django 加载 ROOT_URLCONF 设置指定的 URL 配置;然后按顺序检查 URL 配置中的各个 URL 模式,依次与请求的 URL 比 较,直到找到匹配的模式为止。
找到匹配的模式后,调用对应的视图函数,把一个HttpRequest对象作为第一个参数传给视图函数,视图函数必须返回一个HttpResponse对象。
综上,整个过程如下:
- 收到请求
- Django查看ROOT_URLCONF设置,找到根URL配置
- Django比较URL配置中的各个URL模式,找到与请求匹配的那个
- 如果找到,调用对应的视图函数
- 视图函数返回一个HttpResponse对象
- Django把HttpResponse对象转换成正确的HTTP响应,得到网页
参考书籍:《精通Django》
Django之视图和URL配置的更多相关文章
- django(二)视图和URL配置
创建一份视图: 在上一节,使用django-admin.py startproject制作的mysite文件夹中,创建一个叫做views.py的空文件.这个Python模块健柏寒这一章的视图. vie ...
- Django:视图和URL配置
一.视图 1.在mysite文件夹下.创建views.py文件(文件名称没有特别的要求): from django.http import HttpResponse def hello(re ...
- Django笔记 —— 高级视图和URL配置
最近在学习Django,打算玩玩网页后台方面的东西,因为一直很好奇但却没怎么接触过.Django对我来说是一个全新的内容,思路想来也是全新的,或许并不能写得很明白,所以大家就凑合着看吧- 本篇笔记(其 ...
- Django学习day4——视图和URL配置
创建一个简单的hello world 在day3中我们第一次运行了服务器,里面是一个django的欢迎页面,那是因为我们没有配置URL和视图,django在底层会自动跳转这个页面上 我们在mysite ...
- django-高级视图和url配置
高级视图和url配置 一.URLconf技巧 1.流线型化函数导入 对于配置url,我们可以使用以下几种方式: (1)引入view中的函数 from firstSite.view import cur ...
- 视图和URL配置
视图和URL配置 实验简介 上一章里我们介绍了如何创建一个Django项目并启动Django的开发服务器.本章你将学到用Django创建动态网页的基本知识. 同时,也教会大家怎么在本地机器上建立一个独 ...
- 视图的URL配置,找不到我设置的第一个Page
问题:视图的URL配置,找不到我设置的第一个Page 我的代码如下: 结果访问/test/时说找不到这个page 原因:patterns方法的参数有两个,一个是prefix,一个是参数元祖,详见下 ...
- Python的Django框架中的URL配置与松耦合
Python的Django框架中的URL配置与松耦合 用 python 处理一个文本时,想要删除其中中某一行,常规的思路是先把文件读入内存,在内存中修改后再写入源文件. 但如果要处理一个很大的文本,比 ...
- 测试开发之Django——No8.Django中的视图与URL配置
在Django中,页面内容是靠views function(视图函数)来产生,URL定义在URLconf中. 这是一个纯净项目的url配置文件,他存在的目录,是与setting文件在同一个目录中. u ...
随机推荐
- 洛谷P3195||bzoj1010 [HNOI2008]玩具装箱TOY
洛谷P3195 bzoj1010 设s数组为C的前缀和 首先$ans_i=min_{j<i}\{ans_j+(i-j-1+s_i-s_j-L)^2\}$ (斜率优化dp)参考(复读)https: ...
- Excel2010如何实现隔行设置背景色
当Excel表格中的数据很多,很有可能会出现看错行的现象,为防止看错行,可以隔行设置背景色.可以通过套用表格格式或者条件格式来达到隔行变色的效果 方法一:通过套用表格格式 1.选中要处理的单元格或者列 ...
- 阿里巴巴Java开发手册_不建议在循环体中使用+进行字符串拼接
18. [推荐]循环体内,字符串的连接方式,使用StringBuilder的append方法进行扩展. 说明:下例中,反编译出的字节码文件显示每次循环都会new出一个StringBuilder对象,然 ...
- mitmproxy——抓取http、https
mitmproxy是一个支持HTTP和HTTPS的抓包程序,有类似Fiddler.Charles的功能.除了命令行形式的控制台,mitmproxy还有两个关联组件:mitmdump和mitmweb. ...
- Unity [RequireComponent(typeof(组件名))]
- 【开源我写的富文本】打造全网最劲富文本技术选型之经典OOP仍是魅力硬核。
套路--先贴图 demo : http://www.vvui.net/editor/index.html gitee : https://gitee.com/kevin-huang/Bui-Edit ...
- .net中Response.End() 和Response.Redirect("http://dotnet.aspx.cc");
问:什么情况下需要Response.End()语句,加这句有什么好处 答: 首先你要理解Response.End()的意思,它的意思是终止执行下面的语句!但有时不加和加上都一样,但还要加上好,为什么呢 ...
- IDEA运行时报错(IDEA不识别新语法):Error:java: Compilation failed: internal java compiler error
File-->setting...-->Buil,Execution,Deployment-->Compiler-->Java Compiler中,改一下Module,我的原来 ...
- [转]linux C 打印当前时间
#include <stdio.h> #include <time.h> int main(void) { time_t t; time(&t); printf(&qu ...
- fish 与oh-my-fish 的安装
fish 相对于 自带的shell优势很大,最近在研究使用中. 安装教程如下: sudo apt-get install fish oh-my-fish是github上开源项目,使得fish的使用更加 ...