django快速获取项目所有的URL

本文介绍了一种在 Django 1.10 中快速获取所有 URL 的方法,该方法可用于实现项目的权限控制。通过递归遍历 URL 模式并过滤不需要的 URL,最终收集到所有可用的 URL 并以字典形式返回。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

django快速获取项目所有的URL

django1.10快速获取项目所有的URL列表,可以用于权限控制

函数如下:

import re
def get_url(urllist , parent='' , depth=0 , url_list=[] , url_dict={}):
    for entry in urllist:
        url = entry.regex.pattern
        if re.search('\(' , url) :
            continue
        #过滤正则表达式的URL地址

        url = url.replace(r'^' , '')
        url = url.replace(r'$' , '')
        url = url.replace(r'/' + '$' , '')

        if depth == 0:
            if url  in ['admin' , 'admin/' , 'auth' , 'auth/']:
                continue
            #过滤admin和auth等app

            if re.search('\/$' , url) :
                url_list.append('/' + url)
            else :
                url_list.append('/' + parent + url)

            try :
                url_dict['/'].append('/' + url)
            except :
                url_dict['/'] = []
                url_dict['/'].append('/' + url)
        else :
            url_list.append('/' + parent + url)
            try :
                url_dict['/' + parent].append('/' + parent + url)
            except :
                url_dict['/' + parent] = []
                url_dict['/' + parent].append('/' + parent + url)

        if hasattr(entry, 'url_patterns'):
            get_url(entry.url_patterns , url , depth + 1)

    # url_dict =  {'/basicdata/': ['/basicdata/provider/add', '/basicdata/provider/export', '/basicdata/provider/list', '/basicdata/provider/detail'], '/': ['/basicdata/', '/login.html']}

    # url_list = ['/basicdata/', '/basicdata/department/export', '/basicdata/department/list', '/basicdata/department/detail', '/basicdata/department/edit', '/login.html', '/index.html']

    return  url_dict

注意:
调用get_url函数获得清单,必须使用函数或者class来封装

def recreate(request):
        from library.django.get_url import get_url
        from lykops import urls
        url_dict = get_url(urls.urlpatterns)
        print(url_dict)

        return HttpResponseRedirect(reverse('list')) 

然后修改urls.py

urlpatterns = [
    ......
    url(r'^/recreate/', views.recreate, name="recreate"),
    ......
]

如果其他函数调用的话,报错AttributeError: module ‘lykops.urls’ has no attribute ‘urlpatterns’

  File "/opt/lykops/sysadmin/urls.py", line 5, in <module>
    url(r'^app/add', views.App().add, name="add_app"),
  File "/opt/lykops/sysadmin/views.py", line 76, in __init__
    self.recreate()
  File "/opt/lykops/sysadmin/views.py", line 79, in recreate
    url_dict = get_allurl(urls.urlpatterns)
AttributeError: module 'lykops.urls' has no attribute 'urlpatterns'
<script type="text/javascript"> $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('<ul/>').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('<li/>').text(i)); }; $numbering.fadeIn(1700); }); }); </script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值