使用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通过BF算法实现关键词匹配的方法
Mar 13 Python
简单介绍Python中的struct模块
Apr 28 Python
Python基础教程之正则表达式基本语法以及re模块
Mar 25 Python
Python 读写文件和file对象的方法(推荐)
Sep 12 Python
基于python脚本实现软件的注册功能(机器码+注册码机制)
Oct 09 Python
解决python3 urllib中urlopen报错的问题
Mar 25 Python
python dataframe astype 字段类型转换方法
Apr 11 Python
django+xadmin+djcelery实现后台管理定时任务
Aug 14 Python
python实现简单多人聊天室
Dec 11 Python
Python eval的常见错误封装及利用原理详解
Mar 26 Python
Python实现二叉树的最小深度的两种方法
Sep 30 Python
matplotlib之pyplot模块之标题(title()和suptitle())
Feb 22 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
用javascript实现的仿Flash广告图片轮换效果
2007/04/24 Javascript
js实现页面打印功能实例代码(附去页眉页脚功能代码)
2009/12/15 Javascript
AppBaseJs 类库 网上常用的javascript函数及其他js类库写的
2010/03/04 Javascript
juqery 学习之三 选择器 简单 内容
2010/11/25 Javascript
jQuery的初始化与对象构建之浅析
2011/04/12 Javascript
js 获取屏幕各种宽高的方法(浏览器兼容)
2013/05/15 Javascript
javascript中RegExp保留小数点后几位数的方法分享
2013/08/13 Javascript
基于jquery扩展漂亮的CheckBox(自己编写)
2013/11/19 Javascript
基于jQuery实现表单提交验证
2014/11/24 Javascript
jQuery中first()方法用法实例
2015/01/06 Javascript
javascript实现简单查找与替换的方法
2015/07/22 Javascript
vue实现学生录入系统之添加删除功能
2018/07/11 Javascript
微信小程序实现九宫格抽奖
2020/04/15 Javascript
原生JS实现的跳一跳小游戏完整实例
2019/01/27 Javascript
vue多次循环操作示例
2019/02/08 Javascript
JS实现随机抽选获奖者
2019/11/07 Javascript
python实现查询苹果手机维修进度
2015/03/16 Python
python实用代码片段收集贴
2015/06/03 Python
Python+matplotlib实现填充螺旋实例
2018/01/15 Python
Python实现繁?转为简体的方法示例
2018/12/18 Python
python仿evething的文件搜索器实例代码
2019/05/13 Python
python图形绘制奥运五环实例讲解
2019/09/14 Python
详解Python3 pickle模块用法
2019/09/16 Python
pytorch中tensor.expand()和tensor.expand_as()函数详解
2019/12/27 Python
美国最便宜的旅游网站:CheapTickets
2017/07/09 全球购物
艺龙旅行网酒店预订:国内、港澳台酒店
2018/06/26 全球购物
Doyoueven官网:澳大利亚健身服饰和配饰品牌
2019/03/24 全球购物
励志演讲稿500字
2014/08/21 职场文书
2014初中数学教研组工作总结
2014/12/19 职场文书
催款律师函范文
2015/05/27 职场文书
售房协议书范本
2015/08/11 职场文书
安全主题班会教案
2015/08/12 职场文书
优质护理服务心得体会
2016/01/22 职场文书
2016年度先进班组事迹材料
2016/03/01 职场文书
小学生作文写作技巧100例,非常实用!
2019/07/08 职场文书
利用nginx搭建RTMP视频点播、直播、HLS服务器
2022/05/25 Servers