009 Django 应用和分布式路由

应用和分布式路由


image-20220622225100735

假如我们现在要做的是一个很大的网站,这些网站里面有很多的分区,这么多的分区我们全部都放在同一个views.py里面就会显得代码非常难以维护,同时程序员之间也很难同时进行工程

这个时候我们就需要使用 app 来为每一个版块分区,让他们分别拥有自己的路由,视图,模板和模型

创建应用

  1. manage.py 中的子命令 startapp 创建应用目录文件夹,这里我们创建了一个叫 music 的应用
python manage.py startapp music
  1. settings.py中的INSTALLED_APPS列表中配置安装了这个应用,告知 Django

image-20220622225556712

配置分布式路由

  1. 在新创建的 app 内部新建一个 urls.py 文件,格式和主文件保持一致
    image-20220623095401103
  2. 在主路由内调用 include函数
    • 语法:include(‘app名字.url模块名’)
    • 作用:用于将当前路由转到各个应用的路由配置文件的 urlpatterns 进行分布式处理
# 主文件的 urls.py 文件内
from django.urls import path, re_path
from . import views

urlpatterns = [
    path('music/',include('music.urls'))
]

此时所有以 music 的路由都会被分布到 music 自己的 urls.py 路由进行处理

  1. 在子路由内部我们匹配路由的时候不需要写全地址
    path('index',views.index)
    

应用下的模板

  1. 在应用目录下我们创建 templates文件夹

image-20220623103111482

  1. settings.py文件中开启模板应用功能(默认开启)
    • TEMPLATE中的 APP_DIRS中的值设置为 true

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WtqL73L9-1656148488626)(https://pic.imgdb.cn/item/62b6d1d60947543129568810.png)]

  1. 应用下templates和外层templates都存在相同的模板文件时,django 得查找模板规则

    • 优先查找外层的 templates 目录下的模板
    • 按 INSTALLED_APPS 配置下的应用顺序逐层查找
  2. 我们可以在 templates 文件夹下面再新建一个和应用同名的文件夹

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CrNNIUME-1656148488626)(https://pic.imgdb.cn/item/62b6d1dc09475431295694aa.png)]

  1. 修改我们的模板路径地址
    • 原来 return render(request, ‘index.html’)
    • 修改后 return render(requests, ‘news/index.html’),这样我们的 django 就会去找是否有 news 文件夹,然后如果找到了我们才会运行内部的 index.html 文件,这样就避免了模板文件名字的重复

image-20220623104159772

image-20220623104212338

  • 打开视图文件配置函数

在这里插入图片描述

  • 配置路由

在这里插入图片描述

  • 打开网页

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
分布式路由是指将路由器的控制面和数据面进行分离,将控制面集中管理,使得网络中的路由器可以更加智能和灵活地处理数据包。下面我们来介绍一下如何使用Django框架来实现一个分布式路由的案例。 1. 环境准备 首先,我们需要安装Django框架,可以使用pip命令进行安装: ``` pip install django ``` 2. 创建Django项目 使用Django-admin命令创建一个新的Django项目: ``` django-admin startproject distributed_router ``` 3. 创建应用Django项目中创建一个新的应用: ``` python manage.py startapp router ``` 4. 编写路由器控制面代码 在router应用中创建一个名为controller.py的文件,用于编写控制面的代码。控制面的主要作用是对网络拓扑进行管理,维护路由表,控制数据面的行为等。下面是一个简单的路由器控制面代码示例: ``` class Controller: def __init__(self): self.topology = {} self.routing_table = {} def add_link(self, src, dst, cost): if src not in self.topology: self.topology[src] = {} self.topology[src][dst] = cost if dst not in self.topology: self.topology[dst] = {} self.topology[dst][src] = cost def remove_link(self, src, dst): if src in self.topology and dst in self.topology[src]: del self.topology[src][dst] if dst in self.topology and src in self.topology[dst]: del self.topology[dst][src] def update_routing_table(self): # TODO: implement routing table update algorithm pass def get_next_hop(self, src, dst): if self.routing_table.get(src) is None: self.update_routing_table() return self.routing_table[src].get(dst) ``` 在这个示例中,我们定义了一个名为Controller的类来表示路由器控制面,其构造函数初始化了拓扑和路由表。add_link和remove_link方法用于添加和删除链路,update_routing_table方法用于更新路由表,get_next_hop方法用于获取下一跳路由器。 5. 编写路由器数据面代码 在router应用中创建一个名为dataplane.py的文件,用于编写数据面的代码。数据面的主要作用是处理网络数据包,将其转发到下一跳路由器或目的主机。下面是一个简单的路由器数据面代码示例: ``` class DataPlane: def __init__(self, controller): self.controller = controller def handle_packet(self, packet): src = packet.src dst = packet.dst next_hop = self.controller.get_next_hop(src, dst) if next_hop is None: # drop packet return # forward packet to next hop # TODO: implement packet forwarding algorithm ``` 在这个示例中,我们定义了一个名为DataPlane的类来表示路由器数据面,其构造函数接受一个控制面对象作为参数。handle_packet方法用于处理网络数据包,首先获取下一跳路由器,然后将数据包转发给下一跳路由器。 6. 编写视图函数 在router应用中创建一个名为views.py的文件,用于编写视图函数。视图函数是Django框架中的一个重要组成部分,用于处理HTTP请求并返回响应。在这个案例中,我们可以编写一个名为add_link的视图函数,用于添加链路。下面是一个简单的add_link视图函数示例: ``` from django.http import HttpResponse from .controller import Controller controller = Controller() def add_link(request, src, dst, cost): controller.add_link(src, dst, cost) return HttpResponse("Link added") ``` 在这个示例中,我们首先导入HttpResponse类和Controller类,然后创建了一个名为controller的全局变量来表示路由器控制面对象。add_link视图函数接受三个参数:src表示源节点,dst表示目的节点,cost表示链路成本。视图函数调用了控制面的add_link方法来添加链路,并返回一个HTTP响应。 7. 配置路由 在distributed_router项目中的urls.py文件中配置路由,将add_link视图函数与URL路径进行映射。下面是一个简单的路由配置示例: ``` from django.urls import path from router.views import add_link urlpatterns = [ path('add_link/<str:src>/<str:dst>/<int:cost>/', add_link), ] ``` 在这个示例中,我们定义了一个名为urlpatterns的列表,其中包含了一个名为add_link的URL路径和对应的视图函数。 8. 运行Django服务器 最后,我们可以使用以下命令启动Django服务器: ``` python manage.py runserver ``` 然后,在浏览器中访问http://localhost:8000/add_link/A/B/10/来添加一条从节点A到节点B成本为10的链路。 以上就是使用Django框架实现一个简单的分布式路由器的案例。虽然这个案例还比较简单,但是可以为大家提供一个思路,如何使用Django框架来实现分布式路由器的控制面和数据面。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值