使用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正则表达式 re模块使用说明
May 19 Python
Python删除空文件和空文件夹的方法
Jul 14 Python
python中的迭代和可迭代对象代码示例
Dec 27 Python
基于python实现在excel中读取与生成随机数写入excel中
Jan 04 Python
python jieba分词并统计词频后输出结果到Excel和txt文档方法
Feb 11 Python
python如何为被装饰的函数保留元数据
Mar 21 Python
python使用matplotlib绘制热图
Nov 07 Python
python代理工具mitmproxy使用指南
Jul 04 Python
python批量解压zip文件的方法
Aug 20 Python
深入了解Python在HDA中的应用
Sep 05 Python
python性能测量工具cProfile使用解析
Sep 26 Python
python小白切忌乱用表达式
May 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用正则匹配form表单中所有元素的类型和属性值实例代码
2017/02/28 PHP
Win7环境下Apache连接MySQL提示连接已重置的解决办法
2017/05/09 PHP
php5.3/5.4/5.5/5.6/7常见新增特性汇总整理
2020/02/27 PHP
jquery 操作单选框,复选框,下拉列表实现代码
2009/10/27 Javascript
学习javascript,实现插入排序实现代码
2011/07/31 Javascript
js 判断控件获得焦点的示例代码
2014/03/04 Javascript
jquery实现文本框数量加减功能的例子分享
2014/05/10 Javascript
js jquery获取当前元素的兄弟级 上一个 下一个元素
2015/09/01 Javascript
jQuery数据类型小结(14个)
2016/01/08 Javascript
Angular 根据 service 的状态更新 directive
2016/04/03 Javascript
前端学习笔记style,currentStyle,getComputedStyle的用法与区别
2016/05/28 Javascript
js实现获取两个日期之间所有日期的方法
2016/06/17 Javascript
封装获取dom元素的简单实例
2016/07/08 Javascript
详解javascript立即执行函数表达式IIFE
2017/02/13 Javascript
javascript中layim之查找好友查找群组
2021/02/06 Javascript
[51:34]Ti4主赛事胜者组 DK vs EG 2
2014/07/19 DOTA
python实现外卖信息管理系统
2018/01/11 Python
python pandas dataframe 按列或者按行合并的方法
2018/04/12 Python
selenium 安装与chromedriver安装的方法步骤
2019/06/12 Python
django表单的Widgets使用详解
2019/07/22 Python
使用python os模块复制文件到指定文件夹的方法
2019/08/22 Python
python 魔法函数实例及解析
2019/09/25 Python
Python单元测试与测试用例简析
2019/11/09 Python
Pytest mark使用实例及原理解析
2020/02/22 Python
如何使用Python处理HDF格式数据及可视化问题
2020/06/24 Python
详解基于Scrapy的IP代理池搭建
2020/09/29 Python
Flask中jinja2的继承实现方法及实例
2021/03/03 Python
详解HTML5新增标签
2017/11/27 HTML / CSS
Canvas 文本填充线性渐变的使用详解
2020/06/22 HTML / CSS
法国足球商店:Footcenter
2019/07/06 全球购物
Java如何读取CLOB字段
2013/10/10 面试题
求职者应聘的自我评价
2013/10/16 职场文书
内科护士实习自我鉴定
2013/10/17 职场文书
2015年中个人总结范文
2015/03/10 职场文书
中国古风插画师排行榜:夏达第一,第三是阴阳师姑获鸟皮肤创作者
2022/03/18 国漫
Vue深入理解插槽slot的使用
2022/08/05 Vue.js