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)),
]

去掉注释,剩下的都是精华,逐行分析:

  1. 第一行从 django.conf.urls 模块中导入两个函数:include,用于导入另一个 URL 配置模块;url,使用正则表达式模式匹配浏览器中的 URL,把它映射到 Django 项目中的某个模块上。
  2. 第二行从 django.contrib 模块中导入 admin 函数。这个函数传给 include 函数,加载 Django 管理后台的 URL。
  3. 第三行是 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对象。

综上,整个过程如下:

  1. 收到请求
  2. Django查看ROOT_URLCONF设置,找到根URL配置
  3. Django比较URL配置中的各个URL模式,找到与请求匹配的那个
  4. 如果找到,调用对应的视图函数
  5. 视图函数返回一个HttpResponse对象
  6. Django把HttpResponse对象转换成正确的HTTP响应,得到网页

参考书籍:《精通Django》

Django之视图和URL配置的更多相关文章

  1. django(二)视图和URL配置

    创建一份视图: 在上一节,使用django-admin.py startproject制作的mysite文件夹中,创建一个叫做views.py的空文件.这个Python模块健柏寒这一章的视图. vie ...

  2. Django:视图和URL配置

    一.视图      1.在mysite文件夹下.创建views.py文件(文件名称没有特别的要求): from django.http import HttpResponse def hello(re ...

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

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

  4. Django学习day4——视图和URL配置

    创建一个简单的hello world 在day3中我们第一次运行了服务器,里面是一个django的欢迎页面,那是因为我们没有配置URL和视图,django在底层会自动跳转这个页面上 我们在mysite ...

  5. django-高级视图和url配置

    高级视图和url配置 一.URLconf技巧 1.流线型化函数导入 对于配置url,我们可以使用以下几种方式: (1)引入view中的函数 from firstSite.view import cur ...

  6. 视图和URL配置

    视图和URL配置 实验简介 上一章里我们介绍了如何创建一个Django项目并启动Django的开发服务器.本章你将学到用Django创建动态网页的基本知识. 同时,也教会大家怎么在本地机器上建立一个独 ...

  7. 视图的URL配置,找不到我设置的第一个Page

    问题:视图的URL配置,找不到我设置的第一个Page 我的代码如下: 结果访问/test/时说找不到这个page   原因:patterns方法的参数有两个,一个是prefix,一个是参数元祖,详见下 ...

  8. Python的Django框架中的URL配置与松耦合

    Python的Django框架中的URL配置与松耦合 用 python 处理一个文本时,想要删除其中中某一行,常规的思路是先把文件读入内存,在内存中修改后再写入源文件. 但如果要处理一个很大的文本,比 ...

  9. 测试开发之Django——No8.Django中的视图与URL配置

    在Django中,页面内容是靠views function(视图函数)来产生,URL定义在URLconf中. 这是一个纯净项目的url配置文件,他存在的目录,是与setting文件在同一个目录中. u ...

随机推荐

  1. (转)rename命令详解

    rename命令详解: 原文:http://www.cnblogs.com/amosli/p/3491649.html 对文件重命名是常用的操作之一,一般对单个文件的重命名用mv命令,如: amosl ...

  2. sql 时间函数用法

    v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VM ...

  3. Comparing Two High-Performance I/O Design Patterns--reference

    by Alexander Libman with Vladimir GilbourdNovember 25, 2005 Summary This article investigates and co ...

  4. Oracle单行函数。。。

    单行函数 --字符函数--1.ASCII 返回与指定的字符对应的十进制数;select ascii('A') A,ascii('a') a,ascii('0') zero,ascii(' ') spa ...

  5. 记录下laravel 5.2的auth/logout路由工作不正常的问题

  6. 在Ubuntu中安装MySQL

    在Ubuntu中安装MySQL Ubuntu实用工具系列文章,将介绍基于Linux ubuntu的各种工具软件的配置和使用.有些工具大家早已耳熟能详,有些工具经常用到但确依然陌生.我将记录我在使用操作 ...

  7. Java图形界面开发—列出指定目录

    代码如下: package com.packageTemp; import javax.swing.*; import java.awt.*; import java.awt.event.*; imp ...

  8. [SVN]TortoiseSVN报“500 Internal Server Error”错误的解决方法

    背景:由于某种原因,本人重启了一下SVN服务的物理机,重启过后发现所有人访问SVN都报如下错误. 由于重启之前是没有做过任何改动,所以面对这个错误有点摸不着头脑,防火墙.网管.清缓存等方法都试过,还没 ...

  9. java 创建一个新的http 请求的一种实现方式

    项目中遇到要在后台向集群中的其他一台服务器发送一个请求,参考了网上一些材料,最终完成了需求.代码如下 /** * @Title requestURLWithPost * @Description:发送 ...

  10. HTTPS的加密流程(通俗易懂,不可错过)

    为什么要有HTTPS 都说进技术的产生就是为了解决旧技术的一些弊端. HTTP具有相当优秀的一面,但是凡事有利也有弊,在HTTP进行高速通信的过程中可能产生以下几个问题: HTTP采用明文传输.明文传 ...