使用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 相关文章推荐
在Django的模板中使用认证数据的方法
Jul 23 Python
python中函数默认值使用注意点详解
Jun 01 Python
为Python的Tornado框架配置使用Jinja2模板引擎的方法
Jun 30 Python
浅谈五大Python Web框架
Mar 20 Python
使用Python通过win32 COM实现Word文档的写入与保存方法
May 08 Python
python特性语法之遍历、公共方法、引用
Aug 08 Python
python实现海螺图片的方法示例
May 12 Python
Python 数据可视化pyecharts的使用详解
Jun 26 Python
Python3+Appium安装使用教程
Jul 05 Python
python实现对变位词的判断方法
Apr 05 Python
关于python tushare Tkinter构建的简单股票可视化查询系统(Beta v0.13)
Oct 19 Python
Python sklearn分类决策树方法详解
Sep 23 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 防注入函数(格式化数据)
2011/08/08 PHP
smarty基础之拼接字符串的详解
2013/06/18 PHP
php如何修改SESSION的生存存储时间的实例代码
2017/07/05 PHP
实例分析基于PHP微信网页获取用户信息
2017/11/24 PHP
PHP实现模拟http请求的方法分析
2017/12/20 PHP
Laravel 5.2 文档 数据库 ―― 起步介绍
2019/10/21 PHP
php 的多进程操作实践案例分析
2020/02/28 PHP
HTML 自动伸缩的表格Table js实现
2009/04/01 Javascript
jquery实用代码片段集合
2010/08/12 Javascript
JQuery与JSon实现的无刷新分页代码
2011/09/13 Javascript
Javascript insertAfter() 实现函数代码
2011/10/12 Javascript
jQuery关于导航条背景切换效果实现示例
2013/09/04 Javascript
Javascript仿PHP $_GET获取URL中的参数
2014/05/12 Javascript
在JavaScript中重写jQuery对象的方法实例教程
2014/08/25 Javascript
15个jquery常用方法、小技巧分享
2015/01/13 Javascript
JavaScript获取页面上被选中文字的方法技巧
2015/03/13 Javascript
JavaScript获取DOM元素的11种方法总结
2015/04/25 Javascript
jQuery实现可编辑的表格实例讲解(2)
2015/09/17 Javascript
vue.js入门(3)——详解组件通信
2016/12/02 Javascript
canvas实现图像布局填充功能
2017/02/06 Javascript
很棒的vue弹窗组件
2017/05/24 Javascript
浅谈Vue初学之props的驼峰命名
2018/07/19 Javascript
jQuery 判断元素是否存在然后按需加载内容的实现代码
2020/01/16 jQuery
javascript 设计模式之组合模式原理与应用详解
2020/04/08 Javascript
让python同时兼容python2和python3的8个技巧分享
2014/07/11 Python
Python文件与文件夹常见基本操作总结
2016/09/19 Python
Python 制作糗事百科爬虫实例
2016/09/22 Python
Python 元类实例解析
2018/04/04 Python
Python中包的用法及安装
2020/02/11 Python
解决pytorch多GPU训练保存的模型,在单GPU环境下加载出错问题
2020/06/23 Python
希尔顿酒店中国网站:Hilton中国
2017/03/11 全球购物
马耳他航空公司官方网站:Air Malta
2019/05/15 全球购物
几个Linux面试题笔试题
2016/08/01 面试题
2014年幼儿园园务工作总结
2014/12/05 职场文书
英文感谢信范文
2015/01/21 职场文书
超强台风观后感
2015/06/09 职场文书