路由可以简单理解就是

URL -> 函数名

例如:

/login1/ -> 函数名

urls.py文件中

urlpatterns = [# url(r'^admin/', admin.site.urls),url(r'^index/', views.index),url(r'^index1/', views.index),
]#从下向下匹配,如果上面URL匹配成功下面就不进行匹配处理

如果要处理很多URL请求时,第一个处理方法,是每个URL写一个对应函数。这样效率不高,优处理方法是通过正则表达式处理:

路由关系中动态参数:

例子1:传递一个参数

urls.py文件中

urlpatterns = [url(r'^login/(\d+)/', views.login),
]

views.py文件中接收时注意,传入随URL还有一个数字,所以要有两个参数。

def login(request,nid):print(nid)  #nid就是传入数字参数request HttpResponse('OK')

例子2:传递多个参数

urls.py文件中

urlpatterns = [url(r'^login/(\d+)(\d+)/', views.login),
]

views.py文件中接收时注意,传入随URL还有一个数字,所以要有多个参数。

def login(request,nid1,nid2):print(nid1,nid2)  #nid就是传入数字参数request HttpResponse('OK')

例子3:根据名字传递参数

urls.py文件中

urlpatterns = [url(r'^login/(?P<p1>\d+)/(?P<x2>\d+)/', views.login), ]

views.py文件中接收时注意,传入随URL形参数名称要对应。

def login(request,p1,x2):print(p1,x2)  # 就是传入数字参数request HttpResponse('OK')

例子3:路由实现简单分页

views.py

USER_LIST = []for item in range(94):temp = {'id':item,'username':'alex'+str(item),'email':'email'+str(item)}USER_LIST.append(temp)def index(request,page):page = int(page)start = (page-1)*10end = page * 10user_list = USER_LIST[start:end]return render(request,'index.html',{'user_list':user_list})def detail(request,nid):#详细页nid = int(nid)current_detail_dict = USER_LIST[nid]return render(request,'detail.html',{'current_detail_dict':current_detail_dict})

urls.py

from django.conf.urls import url
from django.contrib import admin
from cmdb import viewsurlpatterns = [url(r'^index/(\d+)', views.index),url(r'^detail/(\d+)', views.detail),]

index.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title></title>
</head>
<body>
<h1 style="color: red">123</h1>
<h1>用户输入:</h1>
<form action="/index/" method="POST"><input type="text" name="user" /><input type="text" name="email" /><input type="submit" value="提交" /></form>
<h1>数据展示:</h1>
<table border="1"><tr><th>ID:</th><th>用户名:</th><th>详细信息:</th></tr>{% for line in user_list %}<tr><td>{{ line.id }}</td><td>{{ line.username }}</td><td><a href="/detail/{{ line.id }}">查看详细</a></td></tr>{% endfor %}
</table>{#<script src="/statics/jquery-1.8.2.min.js"></script>#}
</body>
</html>

detail.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title></title>
</head>
<body>
<ul><li>{{ current_detail_dict.id }}</li><li>{{ current_detail_dict.username }}</li><li>{{ current_detail_dict.email }}</li></ul></body>
</html>

效果:

点入查看详细进入详细页detail.html

路由分发

在实现中遇到有多个app,每个app相互独立,在urls.py中要建立多个路由进行对应,效率不高。

改进方案,进行分级urls调置,第一级urls接收到,再转给 app内urls,进行分发

第一级urls.py

"""mysite URL ConfigurationThe `urlpatterns` list routes URLs to views. For more information please see:https://docs.djangoproject.com/en/1.10/topics/http/urls/
Examples:
Function views1. Add an import:  from my_app import views2. Add a URL to urlpatterns:  url(r'^$', views.home, name='home')
Class-based views1. Add an import:  from other_app.views import Home2. Add a URL to urlpatterns:  url(r'^$', Home.as_view(), name='home')
Including another URLconf1. Import the include() function: from django.conf.urls import url, include2. Add a URL to urlpatterns:  url(r'^blog/', include('blog.urls'))
"""
from django.conf.urls import url
from django.contrib import admin
from cmdb import views
from django.conf.urls import url, includeurlpatterns = [url(r'^web/', include('cmdb.urls')),
]

app内建立一个urls.py

index.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title></title>
</head>
<body>
<h1 style="color: red">123</h1>
<h1>用户输入:</h1>
<form action="/index/" method="POST"><input type="text" name="user" /><input type="text" name="email" /><input type="submit" value="提交" /></form>
<h1>数据展示:</h1>
<table border="1"><tr><th>ID:</th><th>用户名:</th><th>详细信息:</th></tr>{% for line in user_list %}<tr><td>{{ line.id }}</td><td>{{ line.username }}</td><td><a href="/web/detail/{{ line.id }}">查看详细</a></td></tr>{% endfor %}
</table>{#<script src="/statics/jquery-1.8.2.min.js"></script>#}
</body>
</html>

效果在网页输入web/index/1 这样通过web来明确访问那个app

转载于:https://www.cnblogs.com/yaabb163/p/6242529.html

Python 【第十章】 Django路由相关推荐

  1. python后台架构Django教程——路由映射urls

    全栈工程师开发手册 (作者:栾鹏) 本文衔接至python后台架构Django开发全解. 有其他问题请先阅读:http://blog.csdn.net/luanpeng825485697/articl ...

  2. Python框架django路由管理

    django路由管理 普通路由 参数路由 正则路由 正则参数路由 分布式路由 路由的定义 所有django的路由,都必须定义在 路由管理器 urls.py urlpatterns 列表中 在 urlp ...

  3. Python学习---Django路由系统【all】

    Django URL (路由系统) Django URL (路由系统): URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL模式以及要为该URL模式调用的视图函数之间的映 ...

  4. python软件是干什么用的-python中的django是做什么的

    Django是什么? Django是一个基于Python的Web应用框架.它与Python的另外一个Web 框架 Flask最大的区别是,它奉行 "包含一切" 的哲学.该理念即为: ...

  5. 关于Django路由层简单笔记

    Django-路由层 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django,对于客户端发来的某个U ...

  6. python后台架构Django教程——视图views渲染

    全栈工程师开发手册 (作者:栾鹏) 本文衔接至python后台架构Django开发全解. 有其他问题请先阅读: http://blog.csdn.net/luanpeng825485697/artic ...

  7. python后台架构Django教程——admin管理员站点

    全栈工程师开发手册 (作者:栾鹏) python教程全解 本文衔接至python后台架构Django开发全解. 有其他问题请先阅读:http://blog.csdn.net/luanpeng82548 ...

  8. python后台架构Django教程——项目配置setting

    全栈工程师开发手册 (作者:栾鹏) 本文衔接至python后台架构Django开发全解. 有其他问题请先阅读:http://blog.csdn.net/luanpeng825485697/articl ...

  9. Python Web开发——Django框架学习

    文章目录 Web开发简介 Web应用技术 Web前端开发 Web后端开发 使用 Django 开发后端服务 项目目标 管理员操作 登录界面 客户管理界面 添加客户界面 药品管理界面 添加药品界面 订单 ...

  10. 西游之路——python全栈——Django的web框架本质

    知识预览 Django基本命令 二 路由配置系统(URLconf) 三 编写视图 四 Template 五 数据库与ORM admin的配置 一 什么是web框架? 框架,即framework,特指为 ...

最新文章

  1. 微信的行程卡服务器异常,行程卡打不开服务器崩了解决方法 行程卡短信查询步教程...
  2. 三点到六点是几个小时_环卫工在10吨垃圾里找了6小时,终于找到这张价值19万元的餐巾纸...
  3. oracleDBA-D1
  4. 区间调度之区间合并问题
  5. 【 .NET Core 3.0 】框架之二 || 后端项目搭建
  6. Power Designer逆向操作(从mysql5.0生成数据库的物理模型)
  7. Variant 数组
  8. 13个DNS 根服务器
  9. Silverlight+WCF 新手实例 象棋 棋子移动-线交叉点(六)
  10. MS SQL修改数据库名称
  11. Hadoop大数据原理与应用
  12. 新gre argument写作遇到难题如何破解?
  13. 键盘按键的各种编码对照表
  14. Python pyserial 串口开发
  15. html5编辑器(图片编辑器基于canvas)
  16. vue 找回密码_密码系统
  17. Taichi安装与应用
  18. intellidea 应用问题
  19. git worktree 的使用
  20. html5城堡防御游戏《小英雄呼呼》截图

热门文章

  1. 在Ubuntu上搭建Hadoop群集
  2. MySQL的my.cnf详细配置说明
  3. fedora与win双系统 设置win为默认启动
  4. 董明珠人设崩塌了吗?
  5. 线下见面会,下一站定啦!
  6. 自定义char类型字段
  7. 互联网金融的前世、今生和未来-系列三(今生):一场跨界的战争
  8. Mysql——应用学习之旅
  9. win10虚拟机搭建Hadoop集群(已完结)
  10. 连接mysql的各种方式