使用url_helper简化Python中Django框架的url配置教程


Posted in Python onMay 30, 2015

django的url采用正则表达式进行配置,虽然强大却也广为诟病。反对者们认为django的url配置过于繁琐,且不支持默认的路由功能。

我倒觉得还好,只是如果觉得不爽,为什么不自己小小的hack一下,反正也就几行代码的事。

在这个背景下,我整了这个url_helper,利用url_helper可以简化配置和实现url的默认路由。所谓的url_helper其实就只有url_helper.py一个文件,使用的时候只想要import就可以。

url_helper的具体用法请参考具体的例子:

url_helper下载/范例

下面对使用方法做个简单的说明。
url的默认路由

 

from url_helper import execute, url_
import views
 
urlpatterns += patterns('',
  url(r'^(?P<urls>.*)', execute, {'views': views}),
)

在urls.py里增加如下配置,其中views为需要进行路由的views模块。url的规则为 /action/param1/param2/…/ 。

例如:

 

#/edit/4/
 
def edit(request, n="id"):
  html = """ edit object: %s""" % n
  return HttpResponse(html)

在没有指定action的时候默认使用的action为index。
提供函数url_简化url配置

仿照ROR的做法,参数用”:”标识。

例如:
 

#url_(r'/space/:username/:tag/', views.url_), 
#/space/vicalloy/just/
 
def url_(request, username, tag):
  html = """ username: %s <br/> tag: %s""" % (username, tag)
  return HttpResponse(html)

url_helper的完整代码

就如前面说的,代码非常少。不过实际应用的话,应当还需要做一些扩展。

 

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
from django import http
from django.conf.urls.defaults import url
import re
 
def execute(request, urls, views):
  """
  urls [methodName/]param1/param2/.../
  methodName default index
  """
  def get_method(views, methodName):
    try:
      return getattr(views, methodName)
    except Exception, e:
      return None
  method = None
  params = [e for e in urls.split("/") if e]
  params.reverse()
  if params:
    method = get_method(views, params.pop())
  if not method:
    method = get_method(views, 'index')
  if not method:
    raise http.Http404('The requested admin page does not exist.')
  return method(request, *params)
 
def url_(*args,**dic):
  regex = args[0]
  if regex[0] == "/":
    regex = regex[1:]
  regex = '^' + regex
  regex = regex + '$'
  regex = re.sub(":[^/]+",
      lambda matchobj: "(?P<%s>[^/]+)" % matchobj.group(0)[1:],
      regex)
  return url(regex, *args[1:], **dic)
Python 相关文章推荐
python sys模块sys.path使用方法示例
Dec 04 Python
python获取标准北京时间的方法
Mar 24 Python
详解Python 序列化Serialize 和 反序列化Deserialize
Aug 20 Python
在Python 2.7即将停止支持时,我们为你带来了一份python 3.x迁移指南
Jan 30 Python
python中copy()与deepcopy()的区别小结
Aug 03 Python
Python语言进阶知识点总结
May 28 Python
YUV转为jpg图像的实现
Dec 09 Python
Python 统计位数为偶数的数字代码详解
Mar 15 Python
Python reduce函数作用及实例解析
May 08 Python
降低python版本的操作方法
Sep 11 Python
解决pip安装的第三方包在PyCharm无法导入的问题
Oct 15 Python
Biblibili视频投稿接口分析并以Python实现自动投稿功能
Feb 05 Python
在Python的Django框架中simple-todo工具的简单使用
May 30 #Python
Python中Django框架下的staticfiles使用简介
May 30 #Python
简单介绍Python的Django框架的dj-scaffold项目
May 30 #Python
Python的Django框架中settings文件的部署建议
May 30 #Python
Python的Django中django-userena组件的简单使用教程
May 30 #Python
在SAE上部署Python的Django框架的一些问题汇总
May 30 #Python
python实现比较两段文本不同之处的方法
May 30 #Python
You might like
php通过文件头判断格式的方法
2016/05/28 PHP
PHP排序算法之基数排序(Radix Sort)实例详解
2018/04/21 PHP
通过ifame指向的页面高度调整iframe的高度
2006/10/05 Javascript
jquery api参考 visualjquery 中国线路 速度快
2007/11/30 Javascript
图片img的src不变让浏览器重新加载实现方法
2013/03/29 Javascript
Js(JavaScript)中,弹出是或否的选择框示例(confirm用法的实例分析)
2013/07/09 Javascript
编程语言JavaScript简介
2014/10/16 Javascript
jquery 设置style:display的方法
2015/01/29 Javascript
js控制文本框只输入数字和小数点的方法
2015/03/10 Javascript
如何屏蔽防止别的网站嵌入框架代码
2015/08/24 Javascript
jquery实现简单的遮罩层
2016/01/08 Javascript
KnockoutJS 3.X API 第四章之数据控制流foreach绑定
2016/10/10 Javascript
JavaScript切换搜索引擎的导航网页搜索框实例代码
2017/06/11 Javascript
如何快速解决JS或Jquery ajax异步跨域的问题
2018/01/08 jQuery
聊聊JS动画库 Velocity.js的使用
2018/03/13 Javascript
js中Object.defineProperty()方法的不详解
2018/07/09 Javascript
vue2.x 对象劫持的原理实现
2020/04/19 Javascript
JS实现网站楼层导航效果代码实例
2020/06/16 Javascript
vue-amap根据地址回显地图并mark的操作
2020/11/03 Javascript
关于小程序优化的一些建议(小结)
2020/12/10 Javascript
python3实现zabbix告警推送钉钉的示例
2019/02/20 Python
分享8点超级有用的Python编程建议(推荐)
2019/10/13 Python
在Python中用GDAL实现矢量对栅格的切割实例
2020/03/11 Python
使用HTML5 Canvas为图片填充颜色和纹理的教程
2016/03/21 HTML / CSS
松本清官方海外旗舰店:日本最大的药妆连锁店
2017/11/21 全球购物
Europcar比利时:租车
2019/08/26 全球购物
环保小标语
2014/06/13 职场文书
陈胜吴广起义口号
2014/06/20 职场文书
庆六一活动总结
2014/08/29 职场文书
2014乡镇班子个人对照检查材料思想汇报
2014/09/26 职场文书
2014年学生工作总结
2014/11/20 职场文书
2014年乡镇团委工作总结
2014/12/18 职场文书
中小学生安全教育观后感
2015/06/17 职场文书
伊索寓言读书笔记
2015/06/30 职场文书
2019年自助餐厅创业计划书模板
2019/08/22 职场文书
配置nginx负载均衡
2022/05/06 Servers