Openstack dashboard添加license控制功能
openstack_dashboard/settings.py中MIDDLEWARE_CLASSES添加中间件horizon.middleware.LicenseMiddleware。
horizon/middleware/目录中添加license.py,用于检测license状态的中间件,将license状态写入session中。
class LicenseMiddleware(object):
def process_request(self, request):
response = check_license()
request.session['license_info'] = response
return
horizon/middleware/init.py中添加license中间件
from horizon.middleware import license
LicenseMiddleware = license.LicenseMiddleware
修改table_actions和row_actions的基类horizon.tables.actions.BaseAction
添加判断license的方法,对license不敏感的直接返回True。
def _check_license(self, request):
expire_sensitive_object = ['CreateVolume', 'DeleteVolume', 'StartInstance', 'LaunchLinkNG', 'DeleteInstance',
'LaunchImage', 'LaunchImageNG', 'CreateImage', 'CreateVolumeFromImage',
'ImportKeyPair', 'CreateKeyPair', 'CreateNetwork', 'CreateSubnet', 'CreateRouter',
'CreateGroup', 'CreateRule', 'AllocateIP', 'CreateAggregateAction',
'ManageVolumeAction', 'CreateVolumeType', 'CreateQosSpec', 'CreateFlavor',
'AdminCreateImage', 'AdminAllocateFloatingIP', 'UpdateDefaultQuotas',
'CreateProject', 'CreateUserLink', 'ModifyQuotas']
if self.__class__.__name__ in expire_sensitive_object:
self.has_valid_license = request.session.get('license_info')
else:
self.has_valid_license = True
在horizon.tables.actions.BaseAction
的_allowed
中添加_check_license
的调用
def _allowed(self, request, datum):
self._check_license(request)
policy_check = utils_settings.import_setting("POLICY_CHECK_FUNCTION")
if policy_check and self.policy_rules:
target = self.get_policy_target(request, datum)
return (policy_check(self.policy_rules, request, target) and
self.allowed(request, datum))
return self.allowed(request, datum)
在模板horizon/templates/horizon/common/_data_table_action.html
添加license的控制
{% load horizon %}
{% load i18n %}
{% minifyspace %}
{% if action.method != "GET" %}
<button {{ action.attr_string_nc|safe }}
{% if not action.has_valid_license %} disabled="disabled" {% endif %}
class="data-table-action
{% if is_small %}btn-sm{% endif %}
{% for class in action.get_default_classes %}
{{ class }}
{% endfor %}
{% if action.action_type %}
btn-{{ action.action_type }}
{% endif %} btn"
name="action"
{% if action.help_text %}
help_text="{{ action.help_text }}"
{% endif %}
type="submit"
{% if is_table_action %}
value="{{ action.get_param_name }}">
{% if action.icon != None %}
<span class="fa fa-{{ action.icon }}"></span>
{% endif %}
{% if action.handles_multiple %}
{% if not action.has_valid_license %}
{{ action.verbose_name_plural }} ({% trans "License Expired" %})
{% else %}
{{ action.verbose_name_plural }}
{% endif %}
{% else %}
{% if not action.has_valid_license %}
{{ action.verbose_name }} ({% trans "License Expired" %})
{% else %}
{{ action.verbose_name }}
{% endif %}
{% endif %}
{% else %}
value="{{ action.table.name }}__{{ action.name }}__{{ row_id }}">
{% if action.has_valid_license %}
{{ action.verbose_name }}
{% else %}
{{ action.verbose_name }} ({% trans "License Expired" %})
{% endif %}
{% endif %}
</button>
{% else %}
<a {{ action.attr_string_nc|safe }}
class="btn data-table-action {% if is_single %}btn-default {% endif %}{% if is_small %}btn-sm {% endif %}{{ action.get_final_css|safe }}"
{% if is_table_action %}
{% if action.has_valid_license %}
href="{{ action.get_link_url }}"
{% else %}
href="#"
onclick="return false;"
disabled="true"
style="color:#ccc;"
{% endif %}
title="{{ action.verbose_name }}">
{% if action.icon != None %}
<span class="fa fa-{{ action.icon }}"></span>
{% endif %}
{% else %}
{% if action.has_valid_license %}
href="{{ action.bound_url }}"
{% else %}
href="#"
onclick="return false;"
disabled="true"
style="color:#ccc;"
{% endif %}>
{% endif %}
{% if action.has_valid_license %}
{{ action.verbose_name }}
{% else %}
{{ action.verbose_name }} ({% trans "License Expired" %})
{% endif %}
</a>
{% endif %}
{% endminifyspace %}
为了防止修改html元素进行使用,可以在api侧进行控制。
添加装饰器
def has_valid_license(func):
def wrapper(*args, **kwargs):
request = args[0]
license_info = request.session.get('license_info')
if license_info:
return func(*args, **kwargs)
else:
class LicenseExpiredError(Exception):
pass
raise LicenseExpiredError(_('License Expired'))
return wrapper
在openstack_dashboard.api.xxx
xxx
对openstack组件名,在需要license控制的方法前添加@has_valid_license
装饰器即可。
日本超人気のスーパーコピーブランド激安通販専門店
ロレックス買取"弊社はロレックスの商品特に大人気のロレックスデイトナシリーズのロレックス時計の種類を豊富に取り揃えます。日本ロレックス時計とロレックスレプリカのロレックスコピー品の品質よくて、激安税込み価格でご提供します。 }}}}}}
人気の売れ筋商品を多数取り揃えております。
全て激安特価でご提供.お願いします.
★100%品質保証!満足保障!リピーター率100%!
★商品数も大幅に増え、品質も大自信です。
★スタイルが多い、品質がよい、価格が低い!
★顧客は至上 誠実 信用。
★歓迎光臨
★送料無料(日本全国)
https://www.buykopi78.com/product/ProductShow-1851.html
比特币价格分析. https://cn.forex-is.com
Detail: http://zrenieblog.ru/ http://zrenieblog.ru/ http://zrenieblog.ru/
歷史
六七千年前的先民就開始釣魚。周文王曾和兒子們在靈沼釣魚取樂。戰國時范蠡也愛釣魚,常把所釣之魚供給越王勾踐食用。 二十世紀八十年代,中國大陸的各級釣魚協會成立,釣魚地點也從自然水域向養殖水域過度,所釣之魚則從粗養向細養過度。人數增多、水體污染及濫捕濫撈導致釣魚難度上升。釣魚協會開始與漁民和農民簽訂文件,使更多釣者能夠在養殖水域釣魚,達到了雙贏的目的。 二十世紀九十年代初,來自台灣的懸釣法走紅大陸,各地開始建造標準釣池。 二十世紀末,發達國家的釣者提倡回顧自然,引發新一輪野釣戰,而中國的釣者則更青睞精養魚池。]
工具
一种钓鱼竿机械部分示意图
最基本的钓具包括:鱼竿、鱼线、鱼钩、沉坨(又名沉子)、浮标(又名鱼漂)、鱼饵。]:1其他辅助钓具包括:失手绳、钓箱、线轮、抄网、鱼篓、渔具盒、钓鱼服、钓鱼鞋等。]:1
钓竿一般由玻璃纖維或碳纖維轻而有力的竿状物质製成,钓竿和鱼饵用丝线联接。一般的鱼饵可以是蚯蚓、米饭、蝦子、菜叶、苍蝇、蛆等,现代有专门制作好(多数由自己配置的半成品)的粉製鱼饵出售。鱼饵挂在鱼鉤上,不同的對象鱼有不同的釣組配置。在周围水面撒一些誘餌通常会有較好的集魚效果。
钓具
鱼竿
主条目:鱼竿
钓鱼的鱼竿按照材质包括:传统竹竿、玻璃纤维竿、碳素竿,按照钓法包括:手竿、矶竿、海竿(又名甩竿),按照所钓鱼类包括:溪流小继竿、日鲫竿(又名河内竿)、鲤竿、矶中小物竿。]:6-8
鱼钩
主条目:鱼钩
鱼钩就是垂钓用的钩,主要分为:有倒钩、无倒钩、毛钩。]:14
鱼线
主条目:鱼线
鱼线就是垂钓时绑接鱼竿和鱼钩的线,历史上曾使用蚕丝(远古日本)、发丝(江户时期日本)、马尾(西欧)、二枚贝(地中海)、蛛网丝(夏威夷)、琼麻(东南亚)、尼龙钓线(美国)。]:25
鱼漂
主条目:鱼漂
鱼漂又名浮标,垂钓时栓在鱼线上的能漂浮的东西,主要用于搜集水底情报,查看鱼汛,观察鱼饵存留状态,以及水底水流起伏变化。]:36
鱼饵
主条目:鱼饵
鱼饵分为诱饵和钓饵,是一种用来吸引鱼群和垂钓时使用的物品,钓饵分为荤饵、素饵、拟饵、拉饵。]:170
沉子
主条目:沉子
沉子又名沉坨、铅锤,是一种调节鱼漂的工具。]:45
卷线器
主条目:卷线器
卷线器主要安装在海竿和矶竿上的一种卷线的工具。]:63
连结具
主条目:连结具
连结具是连结鱼线与钓竿、母线与子线的一种连结物,使用最广泛的是连结环。]:55
识鱼
鱼类的视力不如人类,距离、宽度均无法和人类的视力比较,鱼类对水色、绿色比较敏感,鱼类的嗅觉非常灵敏,鱼类的听觉也非常灵敏,钓鲤鱼时,不能在岸上大声谈笑、走动不停,鱼类的思考能力非常弱,鱼类应对周边环境随着气象、水温、水色、潮流、流速、水量的变化而变化,于是便出现了在同一个池塘、水库、湖泊,往日钓鱼收获大,今日少,上午收获大,下午少,晴天大,雨天少等情况。]:114-117淡水钓鱼,中国大陆经常垂钓的鱼类对象是本地鲫鱼、日本鲫、非洲鲫、鲤鱼、游鱼、罗非鱼、黄刺鱼(黄鸭叫)、黄尾、鳊鱼、青鱼、草鱼、鲢鱼、鳙鱼,台湾经常垂钓的鱼类对象是本地鲫鱼、日本鲫、吴郭鱼(罗非鱼)、溪哥仔和红猫(粗首马口鱲)、斗鱼、罗汉鱼、苦花、三角姑(河鮠)、竹蒿头(密鱼)。]:117
影响鱼类的6大因素主要是:季节变更、气温高低、水的涨落、风的大小、水的清浊、天气阴晴
dvd 通販 新品 dvd 通販 安い dvd 通販サイト DVD買取 dvd 通販 激安 nhk dvd 購入 アニメ dvd 安く買う ドラマdvd 人気 dvd 海賊版