路由可以简单理解就是

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)*10
end = page * 10
user_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 views urlpatterns = [ 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 Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/1.10/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. Import the include() function: from django.conf.urls import url, include
2. 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, include urlpatterns = [
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

Python 【第十章】 Django路由的更多相关文章

  1. python 终极篇 --- django 路由系统

                          URL配置                        基本格式: from django.conf.urls import url urlpattern ...

  2. Python菜鸟之路:Django 路由、模板、Model(ORM)

    Django路由系统 Django的路由系统让Django可以根据URI进行匹配,进而发送至特定的函数去处理用户请求.有点类似nginx的location功能. Django的路由关系分为三种:普通关 ...

  3. Python菜鸟之路:Django 路由补充1:FBV和CBV - 补充2:url默认参数

    一.FBV和CBV 在Python菜鸟之路:Django 路由.模板.Model(ORM)一节中,已经介绍了几种路由的写法及对应关系,那种写法可以称之为FBV: function base view ...

  4. 【python】-- Django路由系统(网址关系映射)、视图、模板

    Django路由系统(网址关系映射).视图.模板 一.路由系统(网址关系映射) 1.单一路由对应: 一个url对应一个视图函数(类) urls.py: url(r'^test', views.test ...

  5. python - django (路由)

    # """ # Django路由分配系统简介: Django project目录中的urls.py文件中, 以Python [ ( ) ]的数据类型记录了可以访问到该站点 ...

  6. Python开发【Django】:路由规则

    Django路由规则 1.基于正则的URL 在templates目录下创建index.html.detail.html文件 <!DOCTYPE html> <html lang=&q ...

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

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

  8. 第二十章 Django数据库实战

    第二十章 Django数据库实战 第一课 获取单表单数据的三种方式: urls.py中的路由代码: path('busniess',views.busniess), views.py中代码: def ...

  9. python框架之django

    python框架之django 本节内容 web框架 mvc和mtv模式 django流程和命令 django URL django views django temple django models ...

  10. 第六篇:web之python框架之django

    python框架之django   python框架之django 本节内容 web框架 mvc和mtv模式 django流程和命令 django URL django views django te ...

随机推荐

  1. 关于mysql字段时间类型timestamp默认值为当前时间问题

    今天把应用部署到AWS上发现后台修改内容提交后程序报错,经过排查发现是更新数据的时候,有张数据表中的一个timestamp类型的字段默认值变成了"0000-00-00 00:00:00.00 ...

  2. SSH框架整合

    SSH框架整合 一.原理图 action:(struts2) 1.获取表单的数据 2.表单的验证,例如非空验证,email验证等 3.调用service,并把数据传递给service Service: ...

  3. AEAI ESB培训大纲

    1. 概述 本文档的目的是为了让使用者能更好的操作.维护.服务于整个ESB系统平台,该信息系统平台不仅需要成熟稳定的产品,更需要技术熟练的运行维护人员,以便能更好地进行科学有效的运行维护工作. AEA ...

  4. Microsoft Dynamics CRM 2013 Js Odata 查询

    实现功能:   在新建记录时,(大区,省区,城市)的值默认为当前用户的值.tips:字段均为lookup类型; function Default_region(){ var fromtype=Xrm. ...

  5. 便于开发的Helper类

    一.将config封装实体层: 例子config: <?xml version="1.0" encoding="utf-8" ?> <Sett ...

  6. 解析URL 获取某一个参数值

    /** * 解析URL 获取某一个参数值 * * @param name 需要获取的字段 * @param webaddress URL * * @return 返回的参数对应的 value */ - ...

  7. 如何安装Genymotion虚拟机以及Genmotion的eclipse插件

    ---内容开始--- - 首先去genymotion的官网去下载其安装文件 资源下载 Genymotion官网必须注册一个账号这个账号安装之后还有用的,用户名最好用网易126邮箱注册----我下载的是 ...

  8. 【代码笔记】iOS-UILable高度自适应(sizeWithFont)

    一,代码. - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. ...

  9. swift-分支

    swift相当于OC的比较 if后的括号可以省略 if后只能接bool值 if后的大括号不能省略 let num1 = 5.0 let num2 = 4.0 let boo :Bool = true ...

  10. 【译】Spring 4 基于TaskScheduler实现定时任务(注解)

    前言 译文链接:http://websystique.com/spring/spring-job-scheduling-with-scheduled-enablescheduling-annotati ...