使用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 二维数组及画图的实例详解
Apr 03 Python
python TKinter获取文本框内容的方法
Oct 11 Python
python_opencv用线段画封闭矩形的实例
Dec 05 Python
Python函数和模块的使用总结
May 20 Python
python实现一个函数版的名片管理系统过程解析
Aug 27 Python
python 实现绘制整齐的表格
Nov 18 Python
Python函数参数类型及排序原理总结
Dec 19 Python
浅谈python3 构造函数和析构函数
Mar 12 Python
pandas数据拼接的实现示例
Apr 16 Python
详解python程序中的多任务
Sep 16 Python
pycharm代码删除恢复的方法
Jun 26 Python
Python获取江苏疫情实时数据及爬虫分析
Aug 02 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的一个简单加密解密代码
2014/01/14 PHP
PHP有序表查找之插值查找算法示例
2018/02/10 PHP
关于javascript中的parseInt使用技巧
2009/09/03 Javascript
JS实现在Repeater控件中创建可隐藏区域的代码
2010/09/16 Javascript
jquery 面包屑导航 具体实现
2013/06/05 Javascript
NodeJS Express框架中处理404页面一个方式
2014/05/28 NodeJs
javascript中String对象的slice()方法分析
2014/12/20 Javascript
JavaScript获取网页中第一个链接ID的方法
2015/04/03 Javascript
JavaScript整除运算函数ceil和floor的区别分析
2015/04/14 Javascript
jquery不常用方法汇总
2015/07/26 Javascript
js停止冒泡和阻止浏览器默认行为的简单方法
2016/05/15 Javascript
JS实现星星评分功能实例代码(两种方法)
2016/06/09 Javascript
简单实现js页面切换功能
2021/01/10 Javascript
微信小程序 Audio API详解及实例代码
2016/09/30 Javascript
Bootstrap CSS组件之导航条(navbar)
2016/12/17 Javascript
jquery手机触屏滑动拼音字母城市选择器的实例代码
2017/12/11 jQuery
微信小程序实现手势图案锁屏功能
2018/01/30 Javascript
js对象数组和对象的使用实例详解
2019/08/27 Javascript
详解Vite的新体验
2021/02/22 Javascript
Vue多选列表组件深入详解
2021/03/02 Vue.js
[46:16]2018DOTA2亚洲邀请赛3月30日 小组赛B组 iG VS VP
2018/03/31 DOTA
详解Python用三种方式统计词频的方法
2019/07/29 Python
美国背景检查、公共记录和人物搜索网站:BeenVerified
2018/02/25 全球购物
某/etc/fstab文件中的某行如下: /dev/had5 /mnt/dosdata msdos defaults,usrquota 1 2 请解释其含义
2013/04/11 面试题
住房公积金接收函
2014/01/09 职场文书
培训讲师邀请函
2014/01/10 职场文书
餐饮部总监岗位职责范文
2014/02/13 职场文书
初中三年毕业生的自我评价分享
2014/02/14 职场文书
餐厅销售主管职责范本
2014/02/19 职场文书
送餐员岗位职责范本
2014/02/21 职场文书
解除劳动合同证明书模板
2014/11/20 职场文书
创新创业项目计划书该怎样写?
2019/08/13 职场文书
爱心捐款倡议书:点燃希望,传递温暖
2019/11/04 职场文书
七个Python必备的GUI库
2021/04/27 Python
详解Mysql和Oracle之间的误区
2021/05/18 MySQL
SQL Server一个字符串拆分多行显示或者多行数据合并成一个字符串
2022/05/25 SQL Server