Django-website 程序案例系列-3 URL详解
django参考资料:http://docs.30c.org/djangobook2/index.html
urls.py是django中控制接收前端的参数指定函数去执行逻辑
第一种 函数的方式
url(r'^login/', views.login) 接收login/ 去执行views.py里面的login函数(一个url对应一个函数)
def login(request):
pass
第二种 使用类的方式
url(r'^home/', views.Home.as_view()) 接收home/ 去执行views.py里面的login函数(一个url对应一个类) from django.views import View
class Home(View):
def dispatch(self,request,*args,**kwargs): #在执行get和post之前执行这里面的代码,可以实现执行前和执行后的功能
print('before') #执行前执行代码
result = super(Home,self).dispatch(request,*args,**kwargs)
print('after') #执行后执行代码
return result def get(self,request): #get方式
print(request.method)
return render(request,'home.html')
def post(self,request): #post方式
print(request.method)
return render(request,'home.html') url中增加参数:
USER_DICT = { #增加全局字典
'k1': 'root1',
'k2': 'root2',
'k3': 'root3',
}
url(r'^detail/', views.detail) #增加一个新的url
def detail(request): #url处理的函数
nid = request.GET.get('nid')
return HttpResponse(nid)
<ul>
{% for k, v in user_dict.items %}
<li><a href="/detail/?nid={{ k }}" target="_blank">{{ v }}</a></li> #给url传参数(一个系列的url对应一个函数)
{% endfor %}
</ul>
取参数1-来拿到详细信息:
url(r'^detail/', views.detail) #一个系列的url对应一个函数detail
USER_DICT = {
'1': {'name': 'root1', 'email': 'root1@123.com'},
'2': {'name': 'root2', 'email': 'root2@123.com'},
'3': {'name': 'root3', 'email': 'root3@123.com'},
}
def detail(request):
nid = request.GET.get('nid')
detail_info = USER_DICT[nid] #取出nid,然后拿字典的值
return render(request, 'detail.html', {'detail_info': detail_info}) #取值传回前端页面
<body> #显示详细信息 detail.html
<h1>详细信息</h1>
<h6>用户名:{{ detail_info.name }}</h6>
<h6>邮箱:{{ detail_info.email }}</h6>
</body>
取参数2-来拿到详细信息:
url(r'^detail-(\d+)', views.detail) #使用正则取出参数(\d+)
<ul>
{% for k, v in user_dict.items %}
<li><a href="/detail-{{ k }}.html" target="_blank">{{ v.name }}</a></li> #url也要改变
{% endfor %}
</ul>
def detail(request, nid): #函数需要增加参数 nid
detail_info = USER_DICT[nid]
return render(request, 'detail.html', {'detail_info': detail_info})
url正则表达式匹配规则:
<1>
url(r'^detail-(\d+)-(\d+)', views.detail), #使用正则取2个参数 def detail(request, nid, uid): #使用nid,uid两个参数来接收,参数接收有顺序要求
n = nid
u = uid
<2>
url(r'^detail-(?P<nid>\d+)-(?P<uid>\d+)', views.detail), #使用正则分组匹配取2个参数
def detail(request, nid, uid): #使用nid,uid两个参数来接收,参数接收没有顺序要求
n = nid
u = uid <3>
url(r'^detail-(\d+)-(\d+)', views.detail), #使用正则取2个参数
arg=(1,2,...) #传的参数
def detail(request, *args, **kwargs): # 两个参数传递到args里面
arg = (1,2,...) # 由*args来接收,接收后的arg是一个元组,根据元组索引取值
url(r'^detail-(?P<nid>\d+)-(?P<uid>\d+)', views.detail), #使用正则分组匹配取2个参数
arg={'nid':1,'uid':2,..} #传的参数
def detail(request, *args, **kwargs): # nid,uid两个参数传递到kwargs里面
kwarg = {'nid':1,'uid':2,...} # 由**kwargs来接收,接收后的arg是一个字典
<4>
对url路由关系进行命名,以后可以根据名字生成自己想要的url url(r'^app1index/', view.index, name='index') #将appindex命名为index
{% url "index" %} #在模板语言中就可以这么用
url(r'^app1index/(\d+)/', view.index, name='index') #将appindex/(\d+)/命名为index
{% url "index" 3 %} #在模板语言中可以给url传参数
#返回当前页面
{{ request.pathinfo }} #表示当前页面的url
#函数生成当前页面
def detail(request, nid): #通过函数生成一个url
from django.urls import reverse #导入reverse函数
v = reverse('index', args=(90,)) #通过reverse函数生成url appindex/90/
url(r'^appindex/(?P<nid>\d+)/(?P<uid>\d+)/', view.index, name='index')
def detail(request, nid, uid): #通过函数生成一个url
from django.urls import reverse #导入reverse函数
v = reverse('index', kwargs={'nid':90,'uid':88,}) #通过reverse函数生成url appindex/90/88/
{% url "index" nid=1 uid=3 %} #模板语言中可以这样用
路由分发url-include函数: urls.py
from django.conf.urls import url,include #导入include函数 urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^cmdb/', include("app01.urls")), #通过include函数连接app01下面的urls.py
url(r'^monitor/', include("app02.urls")), #通过include函数连接app02下面的urls.py
]
访问方式: 127.0.0.1:8000/cmdb/login/ 127.0.0.1:8000/monitor/login/ 设置默认路由:
#定义默认访问路由,表示输入任意url路径
url(r'^$', views.default_index), 命名空间:
a. project.urls.pyfromdjango.conf.urlsimporturl,include
urlpatterns = [ url(r'^a/', include('app01.urls', namespace='author-polls')), url(r'^b/', include('app01.urls', namespace='publisher-polls')), ]b. app01.urls.pyfromdjango.conf.urlsimporturlfromapp01importviews
app_name = 'app01' urlpatterns = [ url(r'^(?P<pk>\d+)/$', views.detail, name='detail') ] def detail(request, pk):
print(request.resolver_match) return HttpResponse(pk)以上定义带命名空间的url之后,使用name生成URL时候,应该如下:
- v = reverse('app01:detail', kwargs={'pk':11})
- {% url 'app01:detail' pk=12 pp=99 %}
django中的路由系统和其他语言的框架有所不同,在django中每一个请求的url都要有一条路由映射,这样才能将请求交给对一个的view中的函数去处理。其他大部分的Web框架则是对一类的url请求做一条路由映射,从而是路由系统变得简洁。
url(r'^indexe/', views.indexe, {'name': 'url'}), #{'name': 'url'}是给indexe函数传递的默认参数
函数接收:
def indexe(request, name): #使用name来接收默认参数
print(name)
return HttpResponse('wegwegwegwefew')
Django-website 程序案例系列-3 URL详解的更多相关文章
- mongo 3.4分片集群系列之六:详解配置数据库
这个系列大致想跟大家分享以下篇章: 1.mongo 3.4分片集群系列之一:浅谈分片集群 2.mongo 3.4分片集群系列之二:搭建分片集群--哈希分片 3.mongo 3.4分片集群系列之三:搭建 ...
- Hexo系列(二) 配置文件详解
Hexo 是一款优秀的博客框架,在使用 Hexo 搭建一个属于自己的博客网站后,我们还需要对其进行配置,使得 Hexo 更能满足自己的需求 这里所说的配置文件,是位于站点根目录下的 _config.y ...
- ThreeJS系列1_CinematicCameraJS插件详解
ThreeJS系列1_CinematicCameraJS插件详解 接着上篇 ThreeJS系列1_CinematicCameraJS插件介绍 看属性的来龙去脉 看方法作用 通过调整属性查看效果 总结 ...
- 基础篇-http协议《http 简介、url详解、request》
目录 一.http 简介 二.url 详解 三.request 1.get 和 post 2.请求方法 3.request 组成 4.请求头 5.get 请求参数 6.post 请求参数 7.post ...
- Myeclipse程序调试快捷键及步骤详解
Myeclipse程序调试快捷键及步骤详解: 调试快捷键 Eclipse中有如下一些和运行调试相关的快捷键. 1. [Ctrl+Shift+B]:在当前行设置断点或取消设置的断点. ...
- Fiddler抓包6-get请求(url详解)
前言 上一篇介绍了Composer的功能,可以模拟get和post请求,get请求有些是不带参数的,这种比较容易,直接放到url地址栏就行.有些get请求会带有参数,本篇详细介绍url地址格式. 一. ...
- java程序运行时内存分配详解
java程序运行时内存分配详解 这篇文章主要介绍了java程序运行时内存分配详解 ,需要的朋友可以参考下 一. 基本概念 每运行一个java程序会产生一个java进程,每个java进程可能包含一个 ...
- nginx高性能WEB服务器系列之四配置文件详解
nginx系列友情链接:nginx高性能WEB服务器系列之一简介及安装https://www.cnblogs.com/maxtgood/p/9597596.htmlnginx高性能WEB服务器系列之二 ...
- Fiddler抓包6-get请求(url详解)【转载】
本篇转自博客:上海-悠悠 原文地址:http://www.cnblogs.com/yoyoketang/tag/fiddler/ 前言 上一篇介绍了Composer的功能,可以模拟get和post请求 ...
随机推荐
- 学习CSS布局 - box-sizing
box-sizing 人们慢慢的意识到传统的盒子模型不直接,所以他们新增了一个叫做 box-sizing 的CSS属性. 当你设置一个元素为 box-sizing: border-box; 时,此元素 ...
- 『转』统计一个日志文件里,单词出现频率的shell脚本
原文地址:http://blog.csdn.net/taiyang1987912/article/details/39995175 #查找文本中n个出现频率最高的单词 #!/bin/bash coun ...
- LiveCharts文档-3开始-4可用的图表
原文:LiveCharts文档-3开始-4可用的图表 LiveCharts文档-3开始-4可用的图表 LiveCharts共有5类图表,你将会在后面的章节当中看到这些图表的使用方法. Cartesia ...
- 使用IE浏览提示:该页面无法显示
问题描述: 我们有一个外部招聘的网站,DBA反馈新版上线过后首页集成的登录部分页面无法打开,一直显示“该页面无法显示”! 问题排查: 1.因为我本身也不是负责这一块的业务,刚开始以为是网站本身程序的问 ...
- C# 实现表单的自动化测试<通过程序控制一个网页>
学历代表你的过去,能力代表你的现在,学习代表你的将来 十年河东,十年河西,莫欺少年穷 学无止境,精益求精 C# 实现表单的自动化测试,这标题看着就来劲!那么,如何通过C#程序控制一个网页呢? 在此,以 ...
- Ionic 2 中生命周期的命名改变及说明
原文发表于我的技术博客 本文简要整理了在 Ionic 2 的版本中生命周期命名的改变,以及各个事件的解释. 原文发表于我的技术博客 在之前的课程中讲解了 Ionic 生命周期的命名以及使用,不过在 I ...
- sqli-labs less 5-6
sqli-labs less 5-6 从源代码中可以看到,运行返回结果正确的时候只返回you are in....,不会返回数据库当中的信息了,以前的union联合查询就不能用了,开始尝试盲注. 简单 ...
- Codeforces Round #505 (rated, Div. 1 + Div. 2, based on VK Cup 2018 Final)-C. Plasticine zebra
问了学长,感觉还是很迷啊,不过懂了个大概,这个翻转操作,实质不就是在序列后面加上前面部分比如 bw | wwbwwbw 操作过后 wbwbwwbww 而 bw | wwbwwbwbw 这样我们就知道 ...
- Educational Codeforces Round 49 (Rated for Div. 2)A到C题
A题意 给你t表示有t组测试数据,每组数据给你一个含小写字母的字符串,每个字符必须变为它相邻的字符,问最后是否能变成回文串.a不能变成z,反过来也不行 分析 只需对对称位置判断差是否小于2且不等于1, ...
- M1/M2 总结
时光是一列不会回头的列车. 这一学期这么快就过去了,当时刚开始软件工程的那些日子还历历在目.不知道那些如风般过去的日子带给我了什么.然而我又清楚地认识到自己已经改变了. 刚开始软件工程的时候,我对团队 ...