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函数

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

include 语法

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

实例:

- 主urls.py
from django.conf.urls import url,include
from django.contrib import admin
urlpatterns = [
url(r'^dashboard/',include('dashboard.urls')),
url(r'^admin/',admin.site.urls)
]
- dashboard.urls配置文件
from django.conf.urls import url,include
from . import views
urlpatterns = [
url(r'^user/',include([
url(r'^list/$',view.userlist,name='user_list'),
url(r'^info/$',view.userinfo,name='user_linfo'),
url(r'^modify/',include([
url(r'status/$',view.modifystatus,name='modify_status')
]))
]))
]
- dashboard.views视图
from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
def index(request):
return HttpResponse('Index Page') def userList(request):
return HttpResponse("User List Page") def userStatus(request):
return HttpResponse("User Status Page") def UserInfo(request):
return HttpResponse("User Info Page")
- 请求方式
curl http://192.168.33.10:8080/dashboard/user/user_list/
curl http://192.168.33.10:8080/dashboard/user/modify/status/
curl http://192.168.33.10:8080/dashboard/user/modify/info/

url参数

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

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

对应的视图函数

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

关键字参数

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

实例:

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

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

url参数-额外参数

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

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

url反向解析

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

url:
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^articles/([0-9]{4})/$', views.year_archive, name='news-year-archive'),
]
-----------------------
视图函数
from django.core.urlresolvers import reverse
模板:
<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. Python爬虫之简单的爬取百度贴吧数据

    首先要使用的第类库有 urllib下的request  以及urllib下的parse  以及 time包  random包 之后我们定义一个名叫BaiduSpider类用来爬取信息 属性有 url: ...

  2. 786B - Legacy(线段树 + 最短路)线段树优化建图

    题意: 就是给定一张n nn个点的图,求源点s ss到每个点的单源最短路.这张图共有q组边,连边方式有3种: a→b ,边权为w的单向边:a→[l,r] ,即a到连续区间[l,r]中的每一个点都有一条 ...

  3. C# ref out parase 理解

    这节课我们来学习方法中的参数传递,在面向对象二中,我曾说过,参数也属于变量的一种,在c语言的学习时,同学们都学习过参数这个概念和用法,方法使用参数列表来传递变量的基本语法如下:returnType  ...

  4. 06.AutoMapper 之内联映射(Inline Mapping)

    https://www.jianshu.com/p/623655d7cb34 内联映射(Inline Mapping) AutoMapper在 6.2 以上版本将动态创建类型映射. 当第一次调用Map ...

  5. luogu P1852 [国家集训队]跳跳棋

    luogu 直接操作是不可能的,考虑发现一些性质.可以发现如果每次跳的棋子都是两边的,那么最多只有一种方案,那么就把这样操作得到的状态记为当前状态的父亲,从一个状态这样做一定会结束.那么如果两个状态只 ...

  6. 万兴神剪手 Wondershare Filmora v9.2.11.6 简体中文版

    目录 1. 介绍 2. 简体中文9.2.1.10汉化版下载 3. 安装和激活说明 1. 介绍 万兴神剪手 Filmora 是一款界面简洁时尚.功能强大的视频编辑软件,它是深圳万兴科技公司近年来的代表作 ...

  7. 如何正确训练一个 SVM + HOG 行人检测器

    这几个月一直在忙着做大论文,一个基于 SVM 的新的目标检测算法.为了做性能对比,我必须训练一个经典的 Dalal05 提出的行人检测器,我原以为这个任务很简单,但是我错了. 为了训练出一个性能达标的 ...

  8. [转载](转)ISE中ROM初始化文件(.coe)的建立

    原文地址:(转)ISE中ROM初始化文件(.coe)的建立作者:老徐 UltraEdit 对于ROM模块,主要是生成相应的.coe文件. 1.在Matlab中生成正余弦波形的浮点值,并量化为16bit ...

  9. mysql批量替换zencart数据中的反斜杠\

    update products_description set products_description=replace(products_description, "\\'",& ...

  10. 如何给自己的Python项目制作安装包

    Packaging Python Projects¶ 本教程将指导您如何打包一个简单的Python项目.它将向您展示如何添加必要的文件和结构来创建包,如何构建包以及如何将其上载到Python包索引. ...