URL路由

简介

  • 对于高质量的web应用来说,使用简洁,优雅的URL路由是一个值得尊重的细节,Django可以随心所欲的设计URL,不受框架的约束
  • 为了给一个应用设计URL,你需要一个Python模块,通常被称为URLconf,这个模块是纯粹的URL模式(简单的正则表达式)到python函数(视图函数)的简单映射

Django如何处理一个请求

  • django加载ROOT_URLCONF指定的模块,并寻找可用的urlpatterns,它是django.conf.urls.url()实例的一个python列表
  • django依次匹配每个URL,在与请求URL匹配的第一个url停下来
  • 一旦其中的一个正则表达式匹配上,Django将导入并调用所给的视图,这个视图是一个简单的python函数或者类
  • 如果没有匹配到正则表达式,或者如果过程中跑出异常,django将调用一个适当的错误处理视图:handler404,handler500,handler403,handler400

URLconf

URLconf是一个python模块,是一个URL模式(简单的正则表达式)到python视图(函数或者类)之间的映射

urlpatterns

  • urlpatterns:是一个url()实例类型的python列表
  • urlpatterns:中的每个正则表达式在第一次访问他们时被编译

url函数

  1. url(regex,view,kwargs=None,name=None)
  • regex:一个字符串(原始字符串)或简单的正则表达式
  • view:是一个视图函数(类)或者as_view()的结果
  • kwargs:传递额外的参数给视图
  • name:url名称

include 语法

  1. include(module,namespace=None,app_name=None)
  2. include(pattern_list)
  3. include((pattern_list,app_namespace),namespace=None)
  4. include((pattern_list,app_namespace,instance_namwespace))
  • module:URLconf模块
  • namespace:URL命名空间
  • app_name:app的命名空间
  • pattern_list:可迭代的djang.conf.urls.url()实例
  • app_namespace:应用名称空间
  • instance_namespace:实例的命名空间

实例:

  1. - urls.py
  2. from django.conf.urls import url,include
  3. from django.contrib import admin
  4. urlpatterns = [
  5. url(r'^dashboard/',include('dashboard.urls')),
  6. url(r'^admin/',admin.site.urls)
  7. ]
  8. - dashboard.urls配置文件
  9. from django.conf.urls import url,include
  10. from . import views
  11. urlpatterns = [
  12. url(r'^user/',include([
  13. url(r'^list/$',view.userlist,name='user_list'),
  14. url(r'^info/$',view.userinfo,name='user_linfo'),
  15. url(r'^modify/',include([
  16. url(r'status/$',view.modifystatus,name='modify_status')
  17. ]))
  18. ]))
  19. ]
  20. - dashboard.views视图
  21. from django.shortcuts import render
  22. from django.http import HttpResponse
  23. # Create your views here.
  24. def index(request):
  25. return HttpResponse('Index Page')
  26. def userList(request):
  27. return HttpResponse("User List Page")
  28. def userStatus(request):
  29. return HttpResponse("User Status Page")
  30. def UserInfo(request):
  31. return HttpResponse("User Info Page")
  32. - 请求方式
  33. curl http://192.168.33.10:8080/dashboard/user/user_list/
  34. curl http://192.168.33.10:8080/dashboard/user/modify/status/
  35. curl http://192.168.33.10:8080/dashboard/user/modify/info/

url参数

若要从URL中捕获一个值,只需要在他周围放置一对圆括号

  1. urlpatterns = [
  2. url(r'^article/2003/$',views.special_case_2003,name='special_case_2003'),
  3. url(r'^article/(2004)/$',views.articleViewInfo,name='special_case_2003'),
  4. url(r'^user/([0-9]{4})/$',views.userInfo),
  5. url(r'^date/([0-9]{4})/([0-9]{2})/([0-9]{2})$',views.dateInfo)
  6. ]

对应的视图函数

  1. def special_case_2003(request):
  2. return HttpResponse("2003")
  3. def articleViewInfo(request,*args,**kwargs):
  4. print(args) #位置参数获取
  5. return HttpResponse('request2004')
  6. def userInfo(request,*args,**kwargs):
  7. return HttpResponse(json.dumps(args))
  8. def dateInfo(request,*args,**kwargs):
  9. data = {"year":args[0],"month":args[1],"day":args[2]}
  10. # return HttpResponse(json.dumps(data))
  11. return JsonResponse(data)

关键字参数

  1. 语法
  2. (?P<name>pattern)
  3. - name是传给视图参数的名字,
  4. - pattern是一个正则表达式,也是关键字参数的值

实例:

  1. url
  2. url(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2})/$',views.articleInfoView)
  3. -------------------------
  4. view视图函数
  5. def articleInfoView(request,*args,**kwargs):
  6. return JsonResponse(kwargs)

请求方式:http://192.168.33.10:8080/dashboard/articles/2004/12/21/

url参数-额外参数

URLconfs 具有一个钩子,让你传递一个Python 字典作为额外的参数传递给视图函数
django.conf.urls.url() 函数可以接收一个可选的第三个参数,它是一个字典,表示想要传递给视图函数的额外关键字参数

  1. url
  2. url(r'users/(?P<name>[a-z]+)',views.users,{'extra_args':'hehehe'})
  3. view视图函数:
  4. from django.conf.urls import url
  5. from . import views
  6. urlpatterns = [
  7. url(r'^blog/(?P<year>[0-9]{4})/$', views.year_archive, {'foo': 'bar'}),
  8. ]
  9. 请求地址:/blog/2005/
  10. 调用函数:views.year_archive(request, year='2005',foo='bar')

url反向解析

django给每个URL取了一个名字,存储每个URL与name的映射关系
根据Django 视图的标识和将要传递给它的参数的值,获取与之关联的URL。这种方式叫做反向解析URL、反向URL匹配、反向URL查询或者简单的URL反查
实例:

  1. url:
  2. from django.conf.urls import url
  3. from . import views
  4. urlpatterns = [
  5. url(r'^articles/([0-9]{4})/$', views.year_archive, name='news-year-archive'),
  6. ]
  7. -----------------------
  8. 视图函数
  9. from django.core.urlresolvers import reverse
  10. 模板:
  11. <a href="{% url 'news-year-artive' yearvar%}">{{ yaervar }}Archieve</a>

Django基础之二(URL路由)的更多相关文章

  1. Django基础(二)

    Django基础(二) http://www.cnblogs.com/wupeiqi/articles/4508271.html

  2. Django框架02 /Django下载安装、url路由分发

    Django框架02 /Django下载安装.url路由分发 目录 Django框架02 /Django下载安装.url路由分发 1. django下载安装 2. pycharm创建项目 3. 基于D ...

  3. python django基础二URL路由系统

    URL配置 基本格式 from django.conf.urls import url #循环urlpatterns,找到对应的函数执行,匹配上一个路径就找到对应的函数执行,就不再往下循环了,并给函数 ...

  4. 【django基础补充之URL,视图,模版】

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

  5. Django学习手册 - 正则URL路由配置/路由分发

    ############################################### 总结: 一.url路由配置: 方式一:(通过url链接get获取) 方式二:(url路由匹配方式获取-拓 ...

  6. django基础之二

    一.什么是架构? 框架,即framework,特指为解决一个开放性问题而设计的具有一定约束性的支撑结构,使用框架可以帮你快速开发特定的系统,简单地说,就是你用别人搭建好的舞台来做表演. 对于所有的We ...

  7. day56——http协议、MVC和MTV框架模式、django下载安装、url路由分发

    day56 昨日复习 今日内容 HTTP协议 网页:https://www.cnblogs.com/clschao/articles/9230431.html 老师整理的重点 老师整理的重点 请求信息 ...

  8. 第十七篇:django基础(二)

    本篇内容 简单图书crm系统 编写views views:作为MVC中的C,接收用户的输入,调用数据库Model层和业务逻辑Model层,处理后将处理结果渲染到V层中去. app01/views.py ...

  9. Django 基础篇(二)视图与模板

    视图 在django中,视图对WEB请求进行回应 视图接收reqeust对象作为第一个参数,包含了请求的信息 视图就是一个Python函数,被定义在views.py中 #coding:utf- fro ...

随机推荐

  1. webpack4.x + vue2.x 构建前端工程化(1)

    本篇文篇纯属个人笔记,实现工程化打包(用打包后的文件可以正常渲染页面),后续继续更新配置开发环境与生产环境,如果有不合理的地方还望各位指点! 不用脚手架,直接用vue和webpack搭建前端工程化项目 ...

  2. CSS 相对定位 绝对定位

    css中的相对定位和绝对定位. 定位标签:position 包含属性:relative(相对) absolute(绝对) 1.position:relative; 如果对一个元素进行相对定位,首先它将 ...

  3. php获取某经纬度附近地点位置

    最近在做小程序中 其中一个需求就是要到找出某个经纬度地点附近的位置 本质最终的目的就是确定以某个确定的经纬度地点,以某半径画圆形确定的4个点对应的经纬度 /** * [returnSquarePoin ...

  4. Jade学习(四)之结合node如何编译执行

    1.首先安装node 2.新建一个文件夹并进入该文件夹 3.安装jade 4.在新建的文件夹下新建js文件,写nodejs代码 5.在vscode中利用插件code runner直接执行js文件,输出 ...

  5. springboot导包spring-boot-starter-parent出现错误

    <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot ...

  6. Ajax轮询请求

    Ajax轮询请求 什么是轮询? 轮询(polling):客户端按规定时间定时向服务端发送ajax请求,服务器接到请求后马上返回响应信息并关闭连接. Ajax轮询需要服务器有很快的处理速度与快速响应. ...

  7. 十三、LaTex中的参考文献BibTex

    将默认文献工具设置为bibtex

  8. Centos系统的启动流程

    一.CentOS6启动流程 1.流程图 2.说明 (1)post加电自检 这个过程是开机后,BIOS或UEFI进行硬件检查的阶段 (2)MBR引导 自检硬件没有问题时候,这里以BIOS为例,BIOS将 ...

  9. ifconfig - 配置网络接口

    总览 ifconfig [接口] ifconfig 接口 [aftype] options | address ... 描述 ifconfig 用于配置常驻内核的网络接口.它用于在引导成功时设定网络接 ...

  10. SQL的基本操作(三)

    Hive基本SQL操作 Hive DDL(数据库定义语言) 1.数据库的基本操作 --展示所有数据库 show databases; --切换数据库 use database_name; /*创建数据 ...