#!/usr/bin/env python
# -*- coding:utf-8 -*-
import re
from collections import ordereddict
from django.conf import settings
from django.utils.module_loading import import_string
from django.urls import regexurlresolver, regexurlpattern
defcheck_url_exclude
(url)
:"""
排除一些特定的url
:param url:
:return:
"""for regex in settings.auto_discover_exclude:
''' auto_discover_exclude = [
'/admin/.*',
'/login/',
'/logout/',
'/index/',
] '''
if re.match(regex, url)
:return
true
defrecursion_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:
ifisinstance
(item, regexurlpattern)
:# 非路由分發,講路由新增到url_ordered_dict
ifnot item.name:
continue
if pre_namespace:
name =
"%s:%s"
%(pre_namespace, item.name)
else
: name = item.name
url = pre_url + item._regex # /rbac/user/edit/(?p\d+)/
url = url.replace(
'^','')
.replace(
'$','')
if check_url_exclude(url)
:continue
url_ordered_dict[name]
=elif
isinstance
(item, regexurlresolver)
:# 路由分發,遞迴操作
if pre_namespace:
if item.namespace:
namespace =
"%s:%s"
%(pre_namespace, item.namespace,
)else
: namespace = item.namespace
else
:if item.namespace:
namespace = item.namespace
else
: namespace =
none
recursion_urls(namespace, pre_url + item.regex.pattern, item.url_patterns, url_ordered_dict)
defget_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)
# 遞迴去獲取所有的路由
print
(url_ordered_dict)
return url_ordered_dict
Django1 11框架開發流程簡述
本文章中基於ubuntu16.0.4系統中進行除錯。這裡提一下,django框架中setting.py檔案為總配置檔案,大家沒事別輕易修改哦。mkvirtualenv 虛擬環境名 p python3 pip install django workon 虛擬環境名 django admin start...
django1 11文件 模型重點筆記
模型最重要的屬性是manager。它是django 模型進行資料庫查詢操作的介面,並用於從資料庫提取例項 如果沒有自定義manager,則預設的名稱為objects。managers 只能通過模型類訪問,而不能通過模型例項訪問。可以在模型上定義自定義的方法來給你的物件新增自定義的 底層 功能。man...
獲取Django所有路由
直接上 from django.urls import regexurlpattern defget all urls patterns,pre fix,is firt time false,result if is firt time result.clear for item in patter...