使用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动态加载模块的3种方法
Nov 22 Python
你应该知道的python列表去重方法
Jan 17 Python
浅谈python中requests模块导入的问题
May 18 Python
python顺序的读取文件夹下名称有序的文件方法
Jul 11 Python
Windows下将Python文件打包成.EXE可执行文件的方法
Aug 03 Python
python发送告警邮件脚本
Sep 17 Python
python字典值排序并取出前n个key值的方法
Oct 17 Python
python在TXT文件中按照某一字符串取出该字符串所在的行方法
Dec 10 Python
python利用插值法对折线进行平滑曲线处理
Dec 25 Python
Python爬虫之UserAgent的使用实例
Feb 21 Python
mac安装python3后使用pip和pip3的区别说明
Sep 01 Python
python模拟点击玩游戏的实例讲解
Nov 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
DC动画很好看?新作烂得令人发指,名叫《红色之子》
2020/04/09 欧美动漫
PHP 文件上传全攻略
2010/04/28 PHP
str_replace只替换一次字符串的方法
2013/04/09 PHP
PHP统计数值数组中出现频率最多的10个数字的方法
2015/04/20 PHP
php简单实现多语言切换的方法
2016/05/09 PHP
PHP控制反转(IOC)和依赖注入(DI)
2017/03/13 PHP
laravel 字段格式化 modle 字段类型转换方法
2019/09/30 PHP
jQuery on()方法使用技巧详解
2015/04/16 Javascript
javascript判断firebug是否开启的方法
2016/11/23 Javascript
简单三步实现报表页面集成天气
2016/12/15 Javascript
微信小程序 picker-view 组件详解及简单实例
2017/01/10 Javascript
jQuery实现为table表格动态添加或删除tr功能示例
2019/02/19 jQuery
jquery插件开发模式实例详解
2019/07/20 jQuery
使用layui+ajax实现简单的菜单权限管理及排序的方法
2019/09/10 Javascript
vuejs element table 表格添加行,修改,单独删除行,批量删除行操作
2020/07/18 Javascript
在vue中动态修改css其中一个属性值操作
2020/12/07 Vue.js
用vite搭建vue3应用的实现方法
2021/02/22 Vue.js
在Python中用keys()方法返回字典键的教程
2015/05/21 Python
玩转python爬虫之cookie使用方法
2016/02/17 Python
python实现简单中文词频统计示例
2017/11/08 Python
利用python将图片转换成excel文档格式
2017/12/30 Python
python Django中models进行模糊查询的示例
2019/07/18 Python
python+django+rest框架配置创建方法
2019/08/31 Python
Python数据可视化:箱线图多种库画法
2019/11/06 Python
使用Python画出小人发射爱心的代码
2019/11/23 Python
python发qq消息轰炸虐狗好友思路详解(完整代码)
2020/02/15 Python
python应用Axes3D绘图(批量梯度下降算法)
2020/03/25 Python
python语言中有算法吗
2020/06/16 Python
Scrapy基于scrapy_redis实现分布式爬虫部署的示例
2020/09/29 Python
python获取linux系统信息的三种方法
2020/10/14 Python
英国安全产品购物网站:The Safe Shop
2017/03/20 全球购物
钳工实习自我鉴定
2013/09/19 职场文书
大学生学雷锋活动总结
2014/06/26 职场文书
作风大整顿心得体会
2014/09/10 职场文书
小学生田径运动会广播稿
2014/09/11 职场文书
餐厅保洁员岗位职责
2015/04/10 职场文书