使用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 isinstance函数介绍
Apr 14 Python
Python实现扫描局域网活动ip(扫描在线电脑)
Apr 28 Python
Python 中Pickle库的使用详解
Feb 24 Python
python与caffe改变通道顺序的方法
Aug 04 Python
PyQt5实现QLineEdit添加clicked信号的方法
Jun 25 Python
python中的RSA加密与解密实例解析
Nov 18 Python
如何使用Python抓取网页tag操作
Feb 14 Python
python numpy--数组的组合和分割实例
Feb 24 Python
Python3之外部文件调用Django程序操作model等文件实现方式
Apr 07 Python
基于Python实现天天酷跑功能
Jan 06 Python
Python进阶学习之带你探寻Python类的鼻祖-元类
May 08 Python
PyTorch中permute的使用方法
Apr 26 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&amp;&amp;mysql)四
2006/10/09 PHP
PHP 和 XML: 使用expat函数(一)
2006/10/09 PHP
php遍历所有文件及文件夹的方法深入解析
2013/06/08 PHP
创建无限极分类树型结构的简单方法
2017/06/20 PHP
PHP的PDO事务与自动提交
2019/01/24 PHP
PHP使用DOM对XML解析处理操作示例
2019/07/04 PHP
[全兼容哦]--实用、简洁、炫酷的页面转入效果loing
2007/05/07 Javascript
JS中的this变量的使用介绍
2013/10/21 Javascript
JavaScript使用yield模拟多线程的方法
2015/03/19 Javascript
javascript实现dom元素可拖动
2016/03/21 Javascript
jQuery+json实现动态创建复杂表格table的方法
2016/10/25 Javascript
JS正则表达式修饰符global(/g)用法分析
2016/12/27 Javascript
javascript 中null和undefined区分和比较
2017/04/19 Javascript
webpack踩坑之路图片的路径与打包
2017/09/05 Javascript
vue中引用swiper轮播插件的教程详解
2018/08/16 Javascript
详解使用angular框架离线你的应用(pwa指南)
2019/01/31 Javascript
纯javascript实现选择框的全选与反选功能
2019/04/08 Javascript
使用 vue 实例更好的监听事件及vue实例的方法
2019/04/22 Javascript
详解微信小程序用定时器实现倒计时效果
2019/04/30 Javascript
解决layer.open弹出框不能获取input框的值为空的问题
2019/09/10 Javascript
vue视频播放暂停代码
2019/11/08 Javascript
Python中实现的RC4算法
2015/02/14 Python
python脚本监控docker容器
2016/04/27 Python
用Python写一个无界面的2048小游戏
2016/05/24 Python
利用anaconda保证64位和32位的python共存
2021/03/09 Python
Python openpyxl模块原理及用法解析
2020/01/19 Python
台湾菁英交友:结识黄金单身的台湾人
2018/01/22 全球购物
彪马俄罗斯官网:PUMA俄罗斯
2019/07/13 全球购物
俄罗斯购买内衣网站:Trusiki
2020/08/22 全球购物
非功能性需求都包括哪些方面
2013/10/29 面试题
函授自我鉴定
2013/11/06 职场文书
劳动竞赛口号
2014/06/16 职场文书
公司2014年度工作总结
2014/12/10 职场文书
MySQL GRANT用户授权的实现
2021/06/18 MySQL
Mysql如何实现不存在则插入,存在则更新
2022/03/25 MySQL
PYTHON 使用 Pandas 删除某列指定值所在的行
2022/04/28 Python