使用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之私有函数和专有方法
Oct 24 Python
python编写暴力破解FTP密码小工具
Nov 19 Python
给Python入门者的一些编程建议
Jun 15 Python
Python3字符串学习教程
Aug 20 Python
Python 实现数据库(SQL)更新脚本的生成方法
Jul 09 Python
python实现简单tftp(基于udp协议)
Jul 30 Python
Pandas中resample方法详解
Jul 02 Python
Python基于wordcloud及jieba实现中国地图词云图
Jun 09 Python
PyTorch的torch.cat用法
Jun 28 Python
python 实现的车牌识别项目
Jan 25 Python
浅析Python模块之间的相互引用问题
Feb 26 Python
Python pyecharts案例超市4年数据可视化分析
Aug 14 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
解决laravel上传图片之后,目录有图片,但是访问不到(404)的问题
2019/10/14 PHP
innertext , insertadjacentelement , insertadjacenthtml , insertadjacenttext 等区别
2007/06/29 Javascript
javascript Xml增删改查(IE下)操作实现代码
2009/01/30 Javascript
Raphael一个用于在网页中绘制矢量图形的Javascript库
2013/01/08 Javascript
三种检测iPhone/iPad设备方向的方法
2014/04/23 Javascript
简介JavaScript中substring()方法的使用
2015/06/06 Javascript
jquery validate表单验证的基本用法入门
2016/01/18 Javascript
JS &amp; JQuery 动态添加 select option
2016/06/08 Javascript
jQuery操作dom实现弹出页面遮罩层(web端和移动端阻止遮罩层的滑动)
2016/08/25 Javascript
javascript 中的console.log和弹出窗口alert
2016/08/30 Javascript
详解JSON1:使用TSQL查询数据和更新JSON数据
2016/11/21 Javascript
js获取当前周、上一周、下一周日期
2017/03/19 Javascript
Angular X中使用ngrx的方法详解(附源码)
2017/07/10 Javascript
vue填坑之webpack run build 静态资源找不到的解决方法
2018/09/03 Javascript
解决vue v-for 遍历循环时key值报错的问题
2018/09/06 Javascript
JS闭包原理与应用经典示例
2018/12/20 Javascript
vue-router beforeEach跳转路由验证用户登录状态
2018/12/26 Javascript
Vue 使用formData方式向后台发送数据的实现
2019/04/14 Javascript
js实现淘宝浏览商品放大镜功能
2020/10/28 Javascript
了不起的11个JavaScript代码重构最佳实践小结
2021/01/11 Javascript
python结合selenium获取XX省交通违章数据的实现思路及代码
2016/06/26 Python
详解Python进程间通信之命名管道
2017/08/28 Python
将pandas.dataframe的数据写入到文件中的方法
2018/12/07 Python
python文本数据处理学习笔记详解
2019/06/17 Python
Django对models里的objects的使用详解
2019/08/17 Python
Python matplotlib实时画图案例
2020/04/23 Python
Python实现捕获异常发生的文件和具体行数
2020/04/25 Python
python和php学习哪个更有发展
2020/06/17 Python
html5 canvas合成海报所遇问题及解决方案总结
2017/08/03 HTML / CSS
Otel.com:折扣酒店预订
2017/08/24 全球购物
HomeAway英国:全球领先的度假租赁在线市场
2020/02/03 全球购物
亚洲在线旅行门户网站:Expedia.com.hk(智游网)
2020/04/14 全球购物
读书之星事迹材料
2014/05/12 职场文书
关于旅游的活动方案
2014/08/15 职场文书
2015年妇联工作总结范文
2015/04/22 职场文书
党内外群众意见范文
2015/06/02 职场文书