使用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浅拷贝与深拷贝用法实例
May 09 Python
Python数组定义方法
Apr 13 Python
Python实现向服务器请求压缩数据及解压缩数据的方法示例
Jun 09 Python
Python编程之字符串模板(Template)用法实例分析
Jul 22 Python
Python基于回溯法子集树模板解决取物搭配问题实例
Sep 02 Python
python3 requests中使用ip代理池随机生成ip的实例
May 07 Python
Django中如何使用sass的方法步骤
Jul 09 Python
Python中的几种矩阵乘法(小结)
Jul 10 Python
Python导入父文件夹中模块并读取当前文件夹内的资源
Nov 19 Python
Python 使用SFTP和FTP实现对服务器的文件下载功能
Dec 17 Python
python中numpy.empty()函数实例讲解
Feb 05 Python
Python3使用Qt5来实现简易的五子棋小游戏
May 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
Cappuccino 卡布其诺咖啡之制作
2021/03/03 冲泡冲煮
PHP面向对象三大特点学习(充分理解抽象、封装、继承、多态)
2012/05/07 PHP
九个你必须知道而且又很好用的php函数和特点
2013/08/08 PHP
php中autoload的用法总结
2013/11/08 PHP
分享一个超好用的php header下载函数
2014/01/31 PHP
JavaScript语言中的Literal Syntax特性分析
2007/03/08 Javascript
利用js正则表达式验证手机号,email地址,邮政编码
2014/01/23 Javascript
简单选项卡 js和jquery制作方法分享
2014/02/26 Javascript
写出高效jquery代码的19条指南
2014/03/19 Javascript
Javascript访问器属性实例分析
2014/12/30 Javascript
js实现接收表单的值并将值拼在表单action后面的方法
2015/11/23 Javascript
jQuery实现拖拽可编辑模块功能代码
2017/01/12 Javascript
IE11下使用canvas.toDataURL报SecurityError错误的解决方法
2017/11/19 Javascript
利用JQUERY实现多个AJAX请求等待的实例
2017/12/14 jQuery
JavaScript中十种一步拷贝数组的方法实例详解
2019/04/22 Javascript
Vue实现数据表格合并列rowspan效果
2020/11/30 Javascript
Swiper.js实现移动端元素左右滑动
2019/09/08 Javascript
解决vue axios跨域 Request Method: OPTIONS问题(预检请求)
2020/08/14 Javascript
对python中的乘法dot和对应分量相乘multiply详解
2018/11/14 Python
Python for循环与range函数的使用详解
2019/03/23 Python
selenium处理元素定位点击无效问题
2019/06/12 Python
Python_查看sqlite3表结构,查询语句的示例代码
2019/07/17 Python
Django框架序列化与反序列化操作详解
2019/11/01 Python
python3实现raspberry pi(树莓派)4驱小车控制程序
2020/02/12 Python
python GUI库图形界面开发之pyinstaller打包python程序为exe安装文件
2020/02/26 Python
python爬虫如何解决图片验证码
2021/02/14 Python
Html5 new XMLHttpRequest()监听附件上传进度
2021/01/14 HTML / CSS
泰国汽车、火车和轮渡票预订网站:Bus Online Ticket
2017/09/09 全球购物
夏季奶茶店创业计划书
2014/01/16 职场文书
农村改厕实施方案
2014/03/22 职场文书
献爱心倡议书
2014/04/14 职场文书
2014年度安全工作总结
2014/12/04 职场文书
户外活动总结
2015/02/04 职场文书
五一劳动节活动总结
2015/02/09 职场文书
钓鱼岛事件感想
2015/08/11 职场文书
Redis配置外网可访问(redis远程连接不上)的方法
2022/12/24 Redis