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. 第40题:组合总和II

    一.问题描述: 给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合. candidates 中的每个数字在每个组合 ...

  2. 线段树(四)——两个标记(add和set)

    add无序,set有序.规定同时有两个标记时,表示先执行set再执行add. 1. 更新操作: int op,cl,cr,v; void update(int o, int L, int R) { , ...

  3. pat 甲级 1045 ( Favorite Color Stripe ) (动态规划 )

    1045 Favorite Color Stripe (30 分) Eva is trying to make her own color stripe out of a given one. She ...

  4. FTP基础

      FTP服务 只要有一种数据存储格式 :解析库 ,不同解析库需要不同查询方式 nsswitch 框架 平台 (每一种程序自己不再负责实时名称解析的功能,而是将这种功能委托给nsswitch) S/M ...

  5. Amdahl定律和可伸缩性

    性能的思考 提升性能意味着可以用更少的资源做更多的事情.但是提升性能会带来额外的复杂度,这会增加线程的安全性和活跃性上的风险. 我们渴望提升性能,但是还是要以安全为首要的.首先要保证程序能够安全正常的 ...

  6. ARP输入 之 arp_process

    概述 arp_process为ARP输入包的核心处理流程: 若输入为ARP请求且查路由成功,则进行如下判断:输入到本地,则进行应答:否则,允许转发,则转发,本文代码不包含转发流程: 若输入为ARP应答 ...

  7. Java-NIO 之 Selector 与 Pipe

    关于阻塞与非阻塞:https://www.cnblogs.com/jhxxb/p/11272727.html 一.传统的 IO 流都是阻塞式的 当一个线程调用 read() 或 write() 时,该 ...

  8. 2.JSON.stringify()Object

    JSON.stringify() JSON 通常用于与服务端交换数据. 在向服务器发送数据时一般是字符串. 我们可以使用 JSON.stringify() 方法将 JavaScript 对象转换为字符 ...

  9. 性能分析 | MySQL 的慢查分析实例

    最近遇见一个 MySQL 的慢查问题,于是排查了下,这里把相关的过程做个总结. 定位原因 我首先查看了 MySQL 的慢查询日志,发现有这样一条 query 耗时非常长(大概在 1 秒多),而且扫描的 ...

  10. spring clound gateway 上传文件,中文文件名乱码解决办法

    先说解决办法吧: 有三种解决办法 1 ,zuul官方给出了解决方案,使用/zuul开头的请求可以避免中文名乱码以及支持大文件上传 域名是 testgateway.com  接口是  api/image ...