路由系统和中间件系统

路由系统

在Django的urls中我们可以根据一个URL对应一个函数名来定义路由规则如下:

这里需要注意下:当客户访问过来请求的时候,到达路由系统后是根据正则来匹配的,如果上面的匹配成功了,

 后面的路由规则将不会继续匹配,需要注意!!!!所以我们在后面都加一个$来做结尾

1、基本的URL对应。

urls中我们可以根据一个URL对应一个函数名来定义路由规则如下:

from cmdb import views

urlpatterns = [

url(r‘^login/$‘, views.login),

url(r‘^index/$‘, views.index),

url(r‘^lists/$‘, views.lists),

url(r‘^add/$‘, views.add),

]

2.基于app的路由

根据app对路由规则进行一次分类

当app的urls很多的时候,那么就不能再工程的urls下面去设置
应该这样设置:

1.首先在helloword下面的urls这样设置

#导入includefrom django.conf.urls import url,includefrom django.contrib import admin#导入app下的view函数from CMDB import  viewsurlpatterns = [    url(r‘^admin/‘, admin.site.urls),    #使用CMDB 的urls规则    url(r‘^CMDB/‘,include(‘CMDB/urls‘))

]

2.在CMDB app下面创建一个urls.py

内容:


from django.conf.urls import url,includefrom django.contrib import admin#导入app下的view函数from . import viewsurlpatterns = [    url(r‘^admin/‘, admin.site.urls),    url(r‘^login/‘,views.login),    url(r‘^index/‘,views.index),    url(r‘^reg/‘,views.reg),    url(r‘^layout/‘,views.layout), ]

3.在CMDB app下面的views里创建上面urls对应的函数

from django.shortcuts import render,HttpResponse# Create your views here.def index(request):    # return HttpResponse(‘<h1>hello world!!!</h1>‘)    return  render(request,‘index.html‘)def login(request):    return HttpResponse(‘login‘)def reg(request):    return HttpResponse(‘reg‘)def layout(request):    return HttpResponse(‘layout‘)

4、访问

http://127.0.0.1:8000/CMDB/admin/    admin后台管理http://127.0.0.1:8000/CMDB/layout/http://127.0.0.1:8000/CMDB/login/http://127.0.0.1:8000/CMDB/reg/http://127.0.0.1:8000/CMDB/index/

3、动态路由 (动态URL传参【一个参数】)

比如分页:当urls大量过多的时候比如几百个的时候,那么肯定不会去写几百个路由规则

所有这个时候就需要动态urls,使用正则表达式来完成。


1、获取book后面的这个值

2、运行views.book这个函数,并把获取的值自动传给 views.book 作为参数他的参数

1.在CMDB 下面的urls写入以下内容:

from django.conf.urls import url,includefrom django.contrib import admin#导入app下的view函数from . import viewsurlpatterns = [    url(r‘^admin/‘, admin.site.urls),    url(r‘^book/(\d+)$‘, views.book),   //正则匹配]

2. 在CMDB 下面的views写入以下内容:

from django.shortcuts import render,HttpResponse# Create your views here.def book(request,num):    print(num)    return HttpResponse(num)

当用户访问http://127.0.0.1:8000/CMDB/book/数字的时候

django会在自动把参数传给views里的book函数。

3.测试访问:

http://127.0.0.1:8000/CMDB/book/2

http://127.0.0.1:8000/CMDB/book/1
4.动态路由(传多个参数)

    问:我是否可以传多个参数?

可以传多个参数它是 已 / 来分割的。

1.在CMDB下面的urls写入以下内容:

from django.conf.urls import url,includefrom django.contrib import admin#导入app下的view函数from . import viewsurlpatterns = [    url(r‘^admin/‘, admin.site.urls),    url(r‘^book/(\d+)/(\d+)$‘, views.book),]

2.在CMDB下面的views写入以下内容:

def book(request,num1,num2):    print(num1,num2)    num = int(num1) + int(num2)    return HttpResponse(num)

3.测试访问:



http://127.0.0.1:8000/CMDB/book/2/1

显示3

http://127.0.0.1:8000/CMDB/book/2/10

显示12

他的顺序是:正序的,你先给他传那个值,第一个参数就是那个

5.动态的路由(Key:value的形式)

通过正则表达式的分组来做!

    url(r‘^user_list/(?P<v1>\d+)/(?P<V2>\d+)$‘, views.user_list),

这里?p<v1>这里的 v1就是key,vlaue就是传进去的值,

def user_list(request,v2,v1):
    print v2 , v1
    return HttpResponse(v1+v2)

这样我们就不必按照顺序去取了,可以通过key,value的方式来取传进来的值


1.在CMDB下面的urls写入以下内容:

from django.conf.urls import url,includefrom django.contrib import admin#导入app下的view函数from . import viewsurlpatterns = [    url(r‘^admin/‘, admin.site.urls),    url(r‘^book/(?P<k1>\d+)/(?P<k2>\d+)$‘, views.book),    这里 ?p<v1> 这里的v1就是key,vlaue就是传进去的值,]

2.在CMDB下面的views写入以下内容:

from django.shortcuts import render,HttpResponse# Create your views here.def book(request,k1,k2):    print(k1,k2)    return HttpResponse(k1+k2)

6、URL中专(分级匹配)

在实际的生产环境中有这么一种情况:在一个project下面有很多APP,那么我们的路由规则只能写在一个文件里吗?

当然不是,我们可以通过下面的方式来把他分开:


 url(r‘^app01/‘, include("app01.urls")),

然后在app01内创建一个文件urls,不要忘记注册app。然后在访问app01里的url的时候通过:hostip:port/app01/index  or  hostip:port/app01/login


7基于反射实现动态路由设计

有很多的WEB框架,他和Django不太一样。比如 mvc 他会将所有的URL做成一个分类的形式。

在Django中咱们一般是一个url对应一个函数。

但是在其他的WEB框架中他们也把url也进行用正则处理了。比如下面:


    url(r‘^(?P<controller>\w+)/(?P<action>\w+)‘, mp),   


     # 咱们给他做个定义mp中第一个是文件比如
     # home.py   第二个参数是文件中的函数  def index
     #
     #/home/index/
     #/login/index/
     #/update/index/

但是上面的方法仅仅是通过反射来实现的,通过文件找到里面的函数然后执行!

但是在Django中不建议使用此方法。因为不同的WEB框架建议你使用不同的方式,Django就不建议使用反射

来源: http://www.cnblogs.com/luotianshuai/p/5278175.html

Django 中间件 和 请求生命周期。

首先:对于所有的web框架来说本质就是一个socket服务端,浏览器是socket客户端。


http://www.cnblogs.com/luotianshuai/p/5278175.html  【随后总结】

来自为知笔记(Wiz)

时间: 2024-12-24 10:01:23

路由系统和中间件系统的相关文章

Django进阶(路由系统、中间件、缓存、Cookie和Session

路由系统 1.每个路由规则对应一个view中的函数 url(r'^index/(\d*)', views.index), url(r'^manage/(?P<name>\w*)/(?P<id>\d*)', views.manage), url(r'^manage/(?P<name>\w*)', views.manage,{'id':333}), 2.根据app对路由规则进行一次分类 rl(r'^web/',include('web.urls')), 1.每个路由规则对应

【随笔】express中间件系统的基本实现

一直觉得express的中间件系统这种流式处理非常形象,就好像加工流水线一样,每个环节都在针对同一个产品的不同部分完成自己的工作,最后得到一个成品.今天就来实现一个简易的[中间件队列]. 一. API层 初始化方法 let middleware = new MiddleWare(); 添加中间件函数的方法 //Fn为被添加的中间件 middleware.use(Fn); 启动中间件队列 middleware.start(req, res); 二. 核心类的定义 class MiddleWare{

中间件系统的架构设计

中间件系统的架构设计 Master-Slave架构   该系统的本质是希望能够用分布式的方式来处理一些数据,核心思想,就是把数据分发到很多台机器上来处理,然后需要有一台机器来控制N多台机器的分布式处理: 分布式的处理,就会肯定涉及到在Master中要维护这个集群的一些核心元数据.数据的分发处理的调度,处理的具体过程的进度,对集群里存放数据进行描述的一些核心元数据. 这些核心元数据会不断的频繁的修改,无论你是基于外部的文件还是数据库,或者是zookeeper来存放这些元数据的话,其实都会导致他的元

ASP.NET Core 1.1 静态文件、路由、自定义中间件、身份验证简介

概述 之前写过一篇关于<ASP.NET Core 1.0 静态文件.路由.自定义中间件.身份验证简介>的文章,主要介绍了ASP.NET Core中StaticFile.Middleware.CustomizeMiddleware和Asp.NetCore Identity.但是由于所有的ASP.NET Core的版本有些老,所以,此次重写一次.使用最新的ASP.NET Core 1.1版本.对于ASP.NET Core 1.1 Preview 1会在以后的文章中介绍 目录 使用静态文件 使用路由

基于suse linux系统的cacti系统部署——rpm包方式

豆丁 http://www.docin.com/p-191889788.html rpm包方式:啊扬--沙迳:2010-12-1:更改:2011/5/16:一.Cacti的简介(来源:网络):Cacti是通过snmpget来获取数据,使用R:Cacti的发展是基于让RRDTool使用者更方:cacti是用php语言实现的一个软件,它的主要:MySQL配合PHP程序存储一些变量数据并对变量 123 基于suse linux系统的cacti系统部署 ——rpm包方式 啊扬--沙迳 2010-12-1

project02 U盘系统与排错系统

U盘系统与排错系统 制作U盘系统的两个主要目的: 1.以U盘为救援系统来修复有故障无法启动操作系统 修复步骤: 1)选尝试从单用户模式启动(内核和基本服务,可以参考/etc/rc.d/rc1.d/S..) 2)如果单用户模式也无法正常启动,可以考虑从光盘或者是U盘启一个linux操作系统,首选使用U盘 2.通过U盘系统的制作让你更了解一个主机上linux系统组成,以及启动流程 LINUX操作系统的组成: 内核 SHELL 应用程序 文件系统 内核 核心文件    vmlinuz 临时根文件  i

微商下单系统开发返利系统

微商下单系统开发返利系统(小古:182-0099-0522微.电),微商下单管理系统开发,微商代理管理系统开发下单系统 一.微商现状: 2016年除了互联网+以外,"微商"肯定还会继续火热,不光媒体报道.身边朋友,甚至越来越多的传统企业加入到微商的大军中.据报道,在中国有2000~3000万微商.但他们的日子也没有想象中来得"滋润",痛点明显.代理管理混乱,价格混乱,货物真假又难以甄别.但反观整个市场,真正可以实现规范化管理的除了借助系统来进行管理似乎别无他法! 二

在CentOS 6.7部署wordpress博客系统Discuz论坛系统

在CentOS 6.7部署wordpress博客系统Discuz论坛系统 服务器操作系统:CentOS6.7 博客部署服务器:Httpd-2.2 后台语言:PHP 数据库:MySql 前端框架:WordPress 1.首先安装需要的软件 yum -y install mysql-server httpd phpphp-mysql 2.启动mysql以及httpd服务 service mysqld start service httpd start 3.创建虚拟主机 4.测试 PHP 和Httpd

实例365(2)---------调用系统api修改系统时间

一:截图 二:代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Runtime.InteropServices; namespace SetDate { public partial cl