使用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 yield 小结和实例
Apr 25 Python
Python中的数据对象持久化存储模块pickle的使用示例
Mar 03 Python
python 网络编程详解及简单实例
Apr 25 Python
Python2.7 实现引入自己写的类方法
Apr 29 Python
不到40行代码用Python实现一个简单的推荐系统
May 10 Python
用python3 返回鼠标位置的实现方法(带界面)
Jul 05 Python
10分钟用python搭建一个超好用的CMDB系统
Jul 17 Python
python基于socket实现的UDP及TCP通讯功能示例
Nov 01 Python
python读取ini配置的类封装代码实例
Jan 08 Python
Python virtualenv虚拟环境实现过程解析
Apr 18 Python
15个Pythonic的代码示例(值得收藏)
Oct 29 Python
一文搞懂如何实现Go 超时控制
Mar 30 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
thinkphp实现图片上传功能分享
2014/03/04 PHP
PHP中把对象数组转换成普通数组的方法
2015/07/10 PHP
php-fpm服务启动脚本的方法
2018/04/27 PHP
thinkphp5.1框架容器与依赖注入实例分析
2019/07/23 PHP
Laravel等框架模型关联的可用性浅析
2019/12/15 PHP
简洁短小的 JavaScript IE 浏览器判定代码
2010/03/21 Javascript
js怎么覆盖原有方法实现重写
2014/09/04 Javascript
JQuery记住用户名密码实现下次自动登录功能
2015/04/27 Javascript
pace.js页面加载进度条插件
2015/09/29 Javascript
javascript实现简单加载随机色方块
2015/12/25 Javascript
JavaScript的字符串方法汇总
2016/07/31 Javascript
node.js中 stream使用教程
2016/08/28 Javascript
Vue.js表单控件实践
2016/10/27 Javascript
nodejs基础知识
2017/02/03 NodeJs
node.js+captchapng+jsonwebtoken实现登录验证示例
2017/08/17 Javascript
用React-Native+Mobx做一个迷你水果商城APP(附源码)
2017/12/25 Javascript
Vue 2.5.2下axios + express 本地请求404的解决方法
2018/02/21 Javascript
vue源码解析之事件机制原理
2018/04/21 Javascript
详解vue项目中调用百度地图API使用方法
2019/04/25 Javascript
你知道JavaScript Symbol类型怎么用吗
2020/01/08 Javascript
[59:15]EG vs LGD 2018国际邀请赛淘汰赛BO3 第一场 8.26
2018/08/29 DOTA
python 多进程通信模块的简单实现
2014/02/20 Python
教你如何将 Sublime 3 打造成 Python/Django IDE开发利器
2014/07/04 Python
Python实现的下载8000首儿歌的代码分享
2014/11/21 Python
Python中使用PIPE操作Linux管道
2015/02/04 Python
python从入门到精通 windows安装python图文教程
2019/05/18 Python
详解程序意外中断自动重启shell脚本(以Python为例)
2019/07/26 Python
pycharm配置当鼠标悬停时快速提示方法参数
2019/07/31 Python
房地产销售经理岗位职责
2014/01/01 职场文书
2014年消防工作实施方案
2014/02/20 职场文书
买房协议书
2014/04/11 职场文书
科技工作者先进事迹
2014/08/16 职场文书
2014年派出所工作总结
2014/11/21 职场文书
庆六一开幕词
2015/01/29 职场文书
表彰大会新闻稿
2015/07/17 职场文书
前端框架ECharts dataset对数据可视化的高级管理
2022/12/24 Javascript