from django.shortcuts import redirect,HttpResponse
from app01.models import *
import re def ddff(module):
'''登陆控制'''
def deco(request):
try:
if request.session['manage_name']:
return module(request)
else:
return redirect("/back/login/login/")
except KeyError:
return redirect("/back/login/login/")
return deco # list
def ddff_list(module):
'''登陆控制'''
def deco(request):
try:
if request.session['manage_name']: # 获取所有权限
functions = getfunctions(request)
# 获取url查询条件
function_ = geturlf(request)
if function_ in functions:
'''有权限'''
print('有权限')
return module(request)
else:
'''无权限'''
print('无权限')
return HttpResponse('<h1 align="center">无权限</h1>')
# return redirect("/back/login/login/")
else:
return redirect("/back/login/login/")
except KeyError:
return redirect("/back/login/login/")
return deco # add
def defense_url(module):
'''防御url'''
def deco(request,aid=None):
if aid != None:
return module(request,aid)
try:
if request.session['manage_name']: # 获取所有权限
functions = getfunctions(request)
# 获取url查询条件
function_ = geturlf(request)
if function_ in functions:
'''有权限'''
print('有权限')
return module(request,aid)
else:
'''无权限'''
print('无权限')
return HttpResponse('<h1 align="center">无权限</h1>')
# return redirect("/back/login/login/")
else:
return redirect("/back/login/login/")
except KeyError:
return redirect("/back/login/login/")
return deco def geturlf(request):
'''url权限'''
requesturl = request.path
# 链接
if re.findall('list', requesturl):
function_ = Function.objects.filter(href_list=requesturl).first()
elif re.findall('add', requesturl):
function_ = Function.objects.filter(href_add=requesturl).first()
else:
function_ = Function.objects.filter(href_t=requesturl).first()
return function_ def getfunctions(request):
'''权限拼接'''
manage_id = request.session['manage_id']
if manage_id == 1:
# 超管
functions = Function.objects.all()
else:
functions = []
manage_id = request.session['manage_id']
# 个人所有职位
mp_objs = MP.objects.filter(manage_id=manage_id)
for mp_obj in mp_objs:
# 一个职位所有权限
pf_objs = PF.objects.filter(position_id=mp_obj.position_id)
# 一个职位权限id列表
id_list = []
for pf_obj in pf_objs:
id_str = (pf_obj.function).split(',')
for i in id_str:
if i not in id_list:
id_list.append(i)
print(id_list)
for i in id_list:
# 一个权限id对应一个权限
function_obj = Function.objects.filter(id=i).first()
if function_obj not in functions:
functions.append(function_obj)
# 一会做限制
return functions

python-Web-django-路由保护的更多相关文章

  1. python web -- django

    一. 安装 django $ pip install django (env)$ python >> import django >> django.VERSION >& ...

  2. python web——Django架构

    环境:windows/linux/OS 需要的软件:Firefox 浏览器(别的也可以 不过firfox和python的webdriver兼容性好) git版本控制系统(使用前要配置 用户 编辑器可以 ...

  3. 【python】-- Django路由系统(网址关系映射)、视图、模板

    Django路由系统(网址关系映射).视图.模板 一.路由系统(网址关系映射) 1.单一路由对应: 一个url对应一个视图函数(类) urls.py: url(r'^test', views.test ...

  4. Python学习---Django路由系统【all】

    Django URL (路由系统) Django URL (路由系统): URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL模式以及要为该URL模式调用的视图函数之间的映 ...

  5. python web django base skill

    web框架本质 socket + 业务逻辑 框架实现socket tonado node.js 使用WSGI实现socket django flask 自己实现框架思路 wsgiref socket ...

  6. [Python web开发] 路由实现 (三)

    一.路由 1.1 什么是路由 简单说,就是路怎么走.就是按照不同的路径分发数据. URL就是不同资源的路径,不同路径应该对应不同的应用程序来处理. 所以,代码中要增加对路径的分支处理. 一个简单的路由 ...

  7. python web django 2nd level -- 待更新

    练习代码位置 实例代码位置 --> app: myblog Form 利用Form表单验证,自己写的html 思路: 新建一个类 LoginForm(forms.Form) 新建对象 obj = ...

  8. python三大web框架Django,Flask,Flask,Python几种主流框架,13个Python web框架比较,2018年Python web五大主流框架

    Python几种主流框架 从GitHub中整理出的15个最受欢迎的Python开源框架.这些框架包括事件I/O,OLAP,Web开发,高性能网络通信,测试,爬虫等. Django: Python We ...

  9. Django,Flask,Tornado三大框架对比,Python几种主流框架,13个Python web框架比较,2018年Python web五大主流框架

    Django 与 Tornado 各自的优缺点Django优点: 大和全(重量级框架)自带orm,template,view 需要的功能也可以去找第三方的app注重高效开发全自动化的管理后台(只需要使 ...

  10. 选择一个 Python Web 框架:Django vs Flask vs Pyramid

    Pyramid, Django, 和 Flask都是优秀的框架,为项目选择其中的哪一个都是伤脑筋的事.我们将会用三种框架实现相同功能的应用来更容易的对比三者.也可以直接跳到框架实战(Framework ...

随机推荐

  1. 开放式最短路径优先OSPF

    1.OSPF基本知识 OSPF作为基于链路状态的协议,解决了RIP在收敛慢,路由环路,可扩展性差等问题,还有以下优点: 采用组播方式发布报文,可以减少对其他不运行ospf路由器的影响 ospf直尺无类 ...

  2. Modbus通讯协议

    <ignore_js_op> O1CN01P1wxTI1dCdw5nAeMO_!!85243700.jpg (287.43 KB, 下载次数: 0) 下载附件  保存到相册 2019-6- ...

  3. 牛客国庆集训派对Day6 && CCPC-WannaFly-Camp #1 F. kingdom(DP)

    题目链接:https://www.nowcoder.com/acm/contest/206/F 题意:一棵 n 个点的树,根为 1,重儿子到父亲的费用为 0,其余为 1,问所有点到 1 的最大总费用是 ...

  4. 2018多校第十场 HDU 6430 (线段树合并)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6430 题意:一棵树上每个节点权值为v[i],每个节点的heard值是:以它为LCA的两个节点的GCD的 ...

  5. 题解 [BZOJ4710] 分特产

    题面 解析 step 1 我们先考虑下有人没有的情况吧, 那对于每个特产就是放隔板的情况了, 设\(a[i]\)为第\(i\)个特产的个数, 那么第\(i\)个特产的方案数就是\(C_{a[i]+n- ...

  6. mysql 指令

    // 授予用户某些权限GRANT ALL ON *.* TO 'USER'@'HOST';// 进入mysql访问特定数据库mysql -u user -p database_name// 查看数据表 ...

  7. python中函数的参数传递小结

    “”“ 函数的参数 --必须参数,默认参数,组合参数 --函数我作为参数 --对象作为参数 --*args  可变参数 --**kwargs关键字参数 “”” def function1(a,b,*a ...

  8. python类的多态、多态性

    多态:多态指的是一类事物有多种形态 多态性: class Animal: def run(self): raise AtrributeError("子类必须实现这种方法") cla ...

  9. Luogu P1450 [HAOI2008]硬币购物 背包+容斥原理

    考虑如果没有个数的限制,那么就是一个完全背包,所以先跑一个完全背包,求出没有个数限制的方案数即可. 因为有个数的限制,所以容斥一下:没有1个超过限制的方案=至少0个超过限制-至少1个超过限制+至少2个 ...

  10. 漫谈计算机编码:从ASCII码到UTF-8

    第一阶段 盘古开天辟地——ASCII码 计算机大家都知道,本质是二进制运算和存储.在计算机中人类的几乎所有文字和字符都没法直接表示,所以美国人在发明计算机的时候为了让计算机可以用于保存和传输文字,就发 ...