使用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实现监控windows服务并自动启动服务示例
Apr 17 Python
Python的ORM框架中SQLAlchemy库的查询操作的教程
Apr 25 Python
Python对象转JSON字符串的方法
Apr 27 Python
Python正则简单实例分析
Mar 21 Python
Python实现的三层BP神经网络算法示例
Feb 07 Python
python存储16bit和32bit图像的实例
Dec 05 Python
详解pyppeteer(python版puppeteer)基本使用
Jun 12 Python
Python中PyQt5/PySide2的按钮控件使用实例
Aug 17 Python
opencv3/Python 稠密光流calcOpticalFlowFarneback详解
Dec 11 Python
python 项目目录结构设置
Feb 14 Python
Python CSS选择器爬取京东网商品信息过程解析
Jun 01 Python
python小程序之飘落的银杏
Apr 17 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中fgetcsv()函数用法实例
2014/11/28 PHP
php获取网页里所有图片并存入数组的方法
2015/04/06 PHP
阿里云Win2016安装Apache和PHP环境图文教程
2018/03/11 PHP
使用jQuery判断IE浏览器版本的代码
2014/06/14 Javascript
JS去除iframe滚动条的方法
2015/04/01 Javascript
使用JQuery实现的分页插件分享
2015/11/05 Javascript
JS组件Bootstrap导航条使用方法详解
2016/04/29 Javascript
详解JavaScript中this关键字的用法
2016/05/26 Javascript
自适应布局meta标签中viewport、content、width、initial-scale、minimum-scale、maximum-scale总结
2017/08/18 Javascript
JS+canvas动态绘制饼图的方法示例
2017/09/12 Javascript
使用vue与jquery实时监听用户输入状态的操作代码
2017/09/19 jQuery
jquery获取元素到屏幕四周可视距离的方法
2018/09/05 jQuery
微信小程序实现打卡日历功能
2020/09/21 Javascript
jQuery实现的自定义轮播图功能详解
2018/12/28 jQuery
js JSON.stringify()基础详解
2019/06/19 Javascript
Vue使用轮询定时发送请求代码
2020/08/10 Javascript
python抓取京东价格分析京东商品价格走势
2014/01/09 Python
python 七种邮件内容发送方法实例
2014/04/22 Python
python开启多个子进程并行运行的方法
2015/04/18 Python
Python3实现发送QQ邮件功能(文本)
2017/12/15 Python
python 处理telnet返回的More,以及get想要的那个参数方法
2019/02/14 Python
python flask搭建web应用教程
2019/11/19 Python
Pandas替换及部分替换(replace)实现流程详解
2020/10/12 Python
Superdry瑞典官网:英国日本街头风品牌
2017/05/17 全球购物
全球最大最受欢迎的旅游社区:Tripadvisor
2017/11/03 全球购物
西班牙Polo衫品牌:Polo Club
2020/08/09 全球购物
汽车维修专业毕业生的求职信分享
2013/12/04 职场文书
销售心得体会
2014/01/02 职场文书
大学生的自我鉴定范文
2014/01/21 职场文书
装修设计师求职信
2014/02/26 职场文书
三八妇女节超市活动方案
2014/08/18 职场文书
2014年汽车销售工作总结
2014/12/01 职场文书
学习型家庭事迹材料(2016精选版)
2016/02/29 职场文书
python之np.argmax()及对axis=0或者1的理解
2021/06/02 Python
Mysql中where与on的区别及何时使用详析
2021/08/04 MySQL
Apache SkyWalking 监控 MySQL Server 实战解析
2022/09/23 Servers