django2自动发现项目中的url
根据路飞学城luffycity.com 的crm项目修改的
1 url入口:rbac/urls.py
urlpatterns = [
...
# 批量操作权限
re_path(r'^multi/permissions/$', menu.multi_permissions, name='multi_permissions') # 自动发现项目中的所有URL
...
]
2 配置文件 settings
不用发现的url列表:
AUTO_DISCOVER_EXCLUDE = [
'/admin/',
'/login/',
]
3 自定发现url的组件:rbac/service/router.py
#!/usr/bin/env python
# -*- coding:utf-8 -*-
__author__ = 'mosson'
import re
from collections import OrderedDict
from django.conf import settings
from django.utils.module_loading import import_string
from django.urls.resolvers import URLResolver, URLPattern # 路由分发:URLResolver。非路由分发:URLPattern def check_url_exclude(url):
"""
查看被排除在外的url
:param url:
:return:
"""
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: 用于保存递归中获取的所有的url
:return:
"""
for item in urlpatterns:
if isinstance(item, URLPattern): #非路由分发 添加到字典url_ordered_dict中
if not item.name:
continue
if pre_namespace:
name = "%s:%s" % (pre_namespace, item.name)
else:
name = item.name url = pre_url + str(item.pattern) #
url = url.replace("^", "").replace("$", "")
if check_url_exclude(url):# 判断是否admin、login等我们不需要的url,是的话直接跳过
continue
url_ordered_dict[name] = {'name':name, 'url':url} elif isinstance(item, URLResolver): # 路由分发, 继续递归
if pre_namespace:
if item.namespace:
namespace = f"{pre_namespace}:{item.namespace}"
else:
namespace = item.namespace
else:
if item.namespace:
namespace = item.namespace
else:
namespace = None# 父级没有namespace,自己也没有
recursion_urls(namespace, pre_url+str(item.pattern), item.url_patterns, url_ordered_dict) def get_all_url():
"""
获取所有的url
:return:
"""
url_ordered_dict = OrderedDict()
md = import_string(settings.ROOT_URLCONF)
# 递归获取所有的url
recursion_urls(None, '/', md.urlpatterns, url_ordered_dict)
return url_ordered_dict
4 视图函数
from rbac.service.router import get_all_url_dict
def multi_permissions(request):
"""
批量操作权限
:param request:
:return:
""" # 获取项目中所有的url all_url_dict = get_all_url_dict()
for k, v in all_url_dict.items():
print(k, v) return HttpResponse('ok it')
django2自动发现项目中的url的更多相关文章
- 自动发现项目中的URL,django1版本和django2版本
一.django 1 版本 routers.py import re from collections import OrderedDict from django.conf import setti ...
- 自动发现项目中的url
def check_url_exclude(url): """ 判断url是否需要自动被发现,如果不是则移除 :param url: 自动发现的url :return: ...
- 自动发现项目中的所有URL
我的rbac组件,是想用到任何一个,项目中的. so 问题来了. - 问题: 拿到一个项目. 怎样获取到,当前项目中, 所有的URL 以及 每个URL的别名name, 还有是有 namespace 命 ...
- 权限组件(12):自动发现项目中有别名的URL
自动发现项目中所有有别名的URL,效果如下: customer_list {'name': 'customer_list', 'url': '/customer/list/'} customer_ad ...
- Django自动获取项目中的全部URL
import re from collections import OrderedDict from django.conf import settings from django.utils.mod ...
- [Vscode插件] 自动编译项目中的Sass文件为CSS
插件名 : Live Sass Compiler 今天在VSCode中发现了一个自动watch项目目录下sass文件的插件,摆脱了在控制台中进行手动watch的繁琐. 安装好以后点击右下角即可自动编译 ...
- 浏览器自动将参数中的url转码问题
遇到一个问题, 开始的url如下: http://localhost:6666/pages/wxpay.html? code_url=weixin://wxpay/biz 请求转发到谷歌浏览器打开后变 ...
- 安装使用Entity Framework Power Tool Bate4 (Code First)从已建好的数据自动生成项目中的对应Model(新手贴,望各位大侠给予指点)
从开始学习使用MVC以后,同时也开始接触EF,很多原理都不是太懂,只知道安装了EF以后,点击哪里可以生成数据库对应的Model,不用再自己手写Model.这里记录的就是如何从已建立好的数据库生成项目代 ...
- vs 打开项目,发现项目中通过nuget引用的dll都不可用的解决方法
把项目文件夹下的package文件删除,再重新生成项目,就会自动从nuget上下载了.
随机推荐
- CodeForces 779C Dishonest Sellers
贪心. 如果这周便宜,那么肯定这周买.另外要求这周至少买到$k$个,那么肯定是需要额外购买差价小的. #include<map> #include<set> #include& ...
- Codeforces Round #116 (Div. 2, ACM-ICPC Rules) Letter(DP 枚举)
Letter time limit per test 1 second memory limit per test 256 megabytes input standard input output ...
- 面向对象编程课程(OOP)第二单元总结
一.设计策略 第一次作业(傻瓜式电梯): 由于是第一次写多线程作业,许多的知识还处在理论阶段,所以第一次作业写得非常的朴实无华.整个程序总共有四个类,Main类负责通过电梯类实例化一个电梯,然后通过w ...
- 初见Python<4>:字典
序列是python中的一种数据结构,映射是另一种.映射(mapping)通过名字来引用值.python内建的唯一一种映射结构是字典.字典中的值没有特殊的顺序,但都存储在一个特定的键中.键可以是数字.字 ...
- POJ 3378 Crazy Thairs(树状数组+DP)
[题目链接] http://poj.org/problem?id=3378 [题目大意] 给出一个序列,求序列中长度等于5的LIS数量. [题解] 我们发现对于每个数长度为k的LIS有dp[k][i] ...
- 【数据结构】【平衡树】浅析树堆Treap
[Treap] [Treap浅析] Treap作为二叉排序树处理算法之一,首先得清楚二叉排序树是什么.对于一棵树的任意一节点,若该节点的左子树的所有节点的关键字都小于该节点的关键字,且该节点的右子树的 ...
- WEB.NET error:请添加一个名为 jquery (区分大小写)的 ScriptResourceMapping 解决方案
参考 http://blog.csdn.net/kisscatforever/article/details/50579935 今天用了一个组件 一个验证型的组件. 然后出现了这个问题. 我看了网上一 ...
- (转)Hadoop系列-IPC模型
学习笔记Mark IPC 实现RPC的一种方法,具有快速.简单的特点. 它不像Sun公司提供的标准RPC包,基于Java序列化. IPC无需创建网络stubs和skeletons. IPC中的方法调用 ...
- win7与Ubuntu 13.04双系统修改启动项顺序
在在win7下安装了Ubuntu 13.04后,在grub中,win7启动想是最后一个,为了把win7设置为默认启动项,需要更改grub设置.google了半天,发现更改/etc /default/g ...
- 【转】Python IDE for Eclipse
原文地址 PyDev is a plugin that enables Eclipse to be used as a Python IDE (supporting also Jython and I ...