使用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通过pil模块获得图片exif信息的方法
Mar 16 Python
介绍Python中的fabs()方法的使用
May 14 Python
Using Django with GAE Python 后台抓取多个网站的页面全文
Feb 17 Python
理解生产者消费者模型及在Python编程中的运用实例
Jun 26 Python
python线程池threadpool使用篇
Apr 27 Python
Python3实现转换Image图片格式
Jun 21 Python
python 对txt中每行内容进行批量替换的方法
Jul 11 Python
Python3 单行多行万能正则匹配方法
Jan 07 Python
Django+zTree构建组织架构树的方法
Aug 21 Python
python运用sklearn实现KNN分类算法
Oct 16 Python
python 一维二维插值实例
Apr 22 Python
Python 如何实现数据库表结构同步
Sep 29 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上传文件常见问题总结
2015/02/03 PHP
PHP访问数据库集群的方法小结
2016/03/14 PHP
Laravel 使用查询构造器配合原生sql语句查询的例子
2019/10/12 PHP
php多进程并发编程防止出现僵尸进程的方法分析
2020/02/28 PHP
改进:论坛UBB代码自动插入方式
2006/12/22 Javascript
jquery如何通过name名称获取当前name的value值
2013/12/20 Javascript
js控制分页打印、打印分页示例
2014/02/08 Javascript
Javascript使用function创建类的两种方法(推荐)
2016/11/19 Javascript
JS检测数组类型的方法小结
2017/03/14 Javascript
JS简单实现自定义右键菜单实例
2017/05/31 Javascript
jquery 一键复制到剪切板的实例
2017/09/20 jQuery
angularJs 表格添加删除修改查询方法
2018/02/27 Javascript
支付宝小程序自定义弹窗dialog插件的实现代码
2018/11/30 Javascript
图文讲解用vue-cli脚手架创建vue项目步骤
2019/02/12 Javascript
Vue-input框checkbox强制刷新问题
2019/04/18 Javascript
实例详解带参数的 npm script
2019/05/28 Javascript
JS实现电脑虚拟键盘的操作
2020/06/24 Javascript
Python爬取国外天气预报网站的方法
2015/07/10 Python
python通过pip更新所有已安装的包实现方法
2017/05/19 Python
浅谈Python里面小数点精度的控制
2018/07/16 Python
Python之循环结构
2019/01/15 Python
python3.7简单的爬虫实例详解
2019/07/08 Python
解析python实现Lasso回归
2019/09/11 Python
python根据文本生成词云图代码实例
2019/11/15 Python
将python字符串转化成长表达式的函数eval实例
2020/05/11 Python
python openCV实现摄像头获取人脸图片
2020/08/20 Python
String和StringBuffer的区别
2015/08/13 面试题
C#可否对内存进行直接的操作
2015/02/26 面试题
奖学金自我鉴定范文
2013/10/03 职场文书
建筑结构施工专业推荐信
2014/02/21 职场文书
家长通知书家长评语
2014/04/17 职场文书
社区巾帼文明岗事迹材料
2014/06/03 职场文书
领导干部群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
大学生读书笔记大全
2015/07/01 职场文书
关爱留守儿童主题班会
2015/08/13 职场文书
redis的list数据类型相关命令介绍及使用
2022/01/18 Redis