Python 【第十章】 Django路由
路由可以简单理解就是
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路由的更多相关文章
- python 终极篇 --- django 路由系统
URL配置 基本格式: from django.conf.urls import url urlpattern ...
- Python菜鸟之路:Django 路由、模板、Model(ORM)
Django路由系统 Django的路由系统让Django可以根据URI进行匹配,进而发送至特定的函数去处理用户请求.有点类似nginx的location功能. Django的路由关系分为三种:普通关 ...
- Python菜鸟之路:Django 路由补充1:FBV和CBV - 补充2:url默认参数
一.FBV和CBV 在Python菜鸟之路:Django 路由.模板.Model(ORM)一节中,已经介绍了几种路由的写法及对应关系,那种写法可以称之为FBV: function base view ...
- 【python】-- Django路由系统(网址关系映射)、视图、模板
Django路由系统(网址关系映射).视图.模板 一.路由系统(网址关系映射) 1.单一路由对应: 一个url对应一个视图函数(类) urls.py: url(r'^test', views.test ...
- python - django (路由)
# """ # Django路由分配系统简介: Django project目录中的urls.py文件中, 以Python [ ( ) ]的数据类型记录了可以访问到该站点 ...
- Python开发【Django】:路由规则
Django路由规则 1.基于正则的URL 在templates目录下创建index.html.detail.html文件 <!DOCTYPE html> <html lang=&q ...
- Python学习---Django路由系统【all】
Django URL (路由系统) Django URL (路由系统): URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL模式以及要为该URL模式调用的视图函数之间的映 ...
- 第二十章 Django数据库实战
第二十章 Django数据库实战 第一课 获取单表单数据的三种方式: urls.py中的路由代码: path('busniess',views.busniess), views.py中代码: def ...
- python框架之django
python框架之django 本节内容 web框架 mvc和mtv模式 django流程和命令 django URL django views django temple django models ...
- 第六篇:web之python框架之django
python框架之django python框架之django 本节内容 web框架 mvc和mtv模式 django流程和命令 django URL django views django te ...
随机推荐
- java基础2.-------interface接口类,实现接口
1.为什么使用接口,是把功能方法都写在一个类中,在其他需要调用的时候,通过implements实现该接口 2.接口可以继承多个父类接口,在实现接口的时候,实现类实现所有方法 3.在接口类写方法时,自动 ...
- 用css隐藏元素的5种方法
.green { width: 100px; height: 100px; background-color: #a0ee00; text-align: center; float: left; ma ...
- [转]HttpModule的认识
HttpModule是向实现类提供模块初始化和处置事件.当一个HTTP请求到达HttpModule时,整个ASP.NET Framework系统还并没有对这个HTTP请求做任何处理,也就是说此时对于H ...
- 长按TextField或TextView显示中文的粘贴复制
首先要确保手机当前系统为中文,只需要在 plist 文件中添加 Localized resources can be mixed = YES 就行了
- 搞不清FastCgi与PHP-fpm之间是个什么样的关系?
问 我在网上查fastcgi与php-fpm的关系,查了快一周了,基本看了个遍,真是众说纷纭,没一个权威性的定义. 网上有的说,fastcgi是一个协议,php-fpm实现了这个协议: 有的说,php ...
- Java 发送邮件
使用Java应用程序发送E-mail十分简单,但是首先你应该在你的机器上安装JavaMail API 和Java Activation Framework (JAF) . 你可以在 JavaMail ...
- Linux Shell脚本逻辑操作符简介
在写程序时,会用到条件判断,测试条件是否成立.很多时候,判断条件是多个的,这个时候需要用到逻辑操作符.shell脚本中常用的有哪些逻辑操作符呢? 1.逻辑与: -a 格式: conditon1 -a ...
- QStatusBar的用法
QStatusBa,状态栏是位于主窗口的最下方,提供一个显示工具提示等信息的地方.QMainWindow类里面就有一个statusBar()函数,用于实现状态栏的调用.以下例子都在QMainWin ...
- 安卓gridview 网格,多行多列实现
主Activity() private int[] image = { R.drawable.camera, R.drawable.wifi, R.drawable.temperature, R.dr ...
- VPN 部署方案
VPN 对比: OpenVPN: 客户端连接太麻烦,放弃 PPTP VPN:版本较高的苹果手机没有 PPTP VPN 的连接方式,放弃 L2TP VPN:支持所有平台,客户端连接容易,最终选择部署 L ...