def check_url_exclude(url):
    """
    判断url是否需要自动被发现,如果不是则移除
    :param url: 自动发现的url
    :return: bool
    """
    for regex in settings.AUTO_DISCOVER_EXCLUDE:
        if re.match(regex, url):
            return True
def recursion_urls(pre_namespace, pre_url, urlpatterns, url_ordered_dict):
    """
    递归的去获取URL
    :param pre_namespace: namespace前缀,以后用户拼接name
    :param pre_url: url前缀,以后用于拼接url
    :param urlpatterns: 路由关系列表
    :param url_ordered_dict: 用于保存递归中获取的所有路由
    :return:
    """
    for item in urlpatterns:
        if isinstance(item, URLPattern):  # 非路由分发,讲路由添加到url_ordered_dict
            if not item.name:
                continue
            # 如果上层有namespace,则拼接rbac:name,反之则只使用自己的name
            name = f"{pre_namespace}:{item.name}" if pre_namespace else item.name
            # url = pre_url + item.pattern.regex.pattern  # /rbac/user/edit/(?P<pk>\d+)/
            url = pre_url + str(item.pattern)  # /rbac/user/edit/(?P<pk>\d+)/
            url = url.replace('^', '').replace('$', '')
            if check_url_exclude(url):
                continue
            url_ordered_dict[name] = {'name': name, 'url': url}

        elif isinstance(item, URLResolver):  # 路由分发,递归操作
            if pre_namespace:
                if item.namespace:
                    namespace = "%s:%s" % (pre_namespace, item.namespace,)
                else:
                    namespace = pre_namespace
            else:
                # 如果自己的namespace存在,就用给自己的,如果自己没有则为None
                namespace = item.namespace or None

            recursion_urls(namespace, pre_url + str(item.pattern), item.url_patterns, url_ordered_dict)
def get_all_url_dict():
    """
    获取项目中所有的URL(必须有name别名)
    :return:
    """
    url_ordered_dict = OrderedDict()

    md = import_string(settings.ROOT_URLCONF)  # from luff.. import urls
    recursion_urls(None, '/', md.urlpatterns, url_ordered_dict)  # 递归去获取所有的路由

    return url_ordered_dict

自动发现项目中的url的更多相关文章

  1. django2自动发现项目中的url

    根据路飞学城luffycity.com 的crm项目修改的 1 url入口:rbac/urls.py urlpatterns = [ ... # 批量操作权限 re_path(r'^multi/per ...

  2. 自动发现项目中的URL,django1版本和django2版本

    一.django 1 版本 routers.py import re from collections import OrderedDict from django.conf import setti ...

  3. 自动发现项目中的所有URL

    我的rbac组件,是想用到任何一个,项目中的. so 问题来了. - 问题: 拿到一个项目. 怎样获取到,当前项目中, 所有的URL 以及 每个URL的别名name, 还有是有 namespace 命 ...

  4. 权限组件(12):自动发现项目中有别名的URL

    自动发现项目中所有有别名的URL,效果如下: customer_list {'name': 'customer_list', 'url': '/customer/list/'} customer_ad ...

  5. Django自动获取项目中的全部URL

    import re from collections import OrderedDict from django.conf import settings from django.utils.mod ...

  6. [Vscode插件] 自动编译项目中的Sass文件为CSS

    插件名 : Live Sass Compiler 今天在VSCode中发现了一个自动watch项目目录下sass文件的插件,摆脱了在控制台中进行手动watch的繁琐. 安装好以后点击右下角即可自动编译 ...

  7. 浏览器自动将参数中的url转码问题

    遇到一个问题, 开始的url如下: http://localhost:6666/pages/wxpay.html? code_url=weixin://wxpay/biz 请求转发到谷歌浏览器打开后变 ...

  8. 安装使用Entity Framework Power Tool Bate4 (Code First)从已建好的数据自动生成项目中的对应Model(新手贴,望各位大侠给予指点)

    从开始学习使用MVC以后,同时也开始接触EF,很多原理都不是太懂,只知道安装了EF以后,点击哪里可以生成数据库对应的Model,不用再自己手写Model.这里记录的就是如何从已建立好的数据库生成项目代 ...

  9. vs 打开项目,发现项目中通过nuget引用的dll都不可用的解决方法

    把项目文件夹下的package文件删除,再重新生成项目,就会自动从nuget上下载了.

随机推荐

  1. PhotonServer新增应用的配置

    一,如下代码配置 <MyGameInstance MaxMessageSize=" MaxQueuedDataPerPeer=" PerPeerMaxReliableData ...

  2. EasyUI之DataGrid分页

    第一步创建分页DataGrid <table id="dg"> <thead> <tr> <th data-options="f ...

  3. 【新手向】一个超简单的基于jQuery ajax的天气预报Demo

    <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...

  4. ssh: Could not resolve hostname github.com: Name or service not known

    问题描述 今天早上在自己的虚拟机上用git pull命令更新github上的版本库时提示下面的错误 [root@localhost ~] git clone git@github.com:sdscbr ...

  5. 微信小程序倒计时实现功能

    onLoad: function () {    var that=this;    this.data.intervarID= setInterval(function () {      var ...

  6. 线程池ThreadPoolExecutor实现原理

    线程属于稀缺资源,对于线程的创建规则,引用<阿里巴巴 Java 手册>中的一条进行说明. 本篇从源码方面介绍ThreadPoolExecutor对象,并简要解析线程池工作原理. 首先Thr ...

  7. zabbix3.4.8中提示host [4gronghe_110] not found

      查看zabbix_agentd.log时出现下列错误 [root@4gronghe_110 ~]# tail /var/log/zabbix/zabbix_agentd.log 1266:2014 ...

  8. 07.SUSE Linux 系统本地yum源配置

    SUSE Linux 系统 1.新建本地源存储目录root@suse:mkdir /mnt/SUSE_LOCAL_SOURCE 2.创建zypper本地源root@suse:zypper ar fil ...

  9. MTV和MVC的区别

    著名的MVC模式:方便解藕 所谓的MVC就是把web应用分为三层 1.模型层: model     负责业务对象和数据库的对象(ORM)的映射 2.视图层       views 负责与用户的交互(书 ...

  10. Clean Docker <none>:<none>

    https://www.projectatomic.io/blog/2015/07/what-are-docker-none-none-images/ Reference: https://www.p ...