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. nodejs解析url参数的三种方法

    要解析的url:http://127.0.0.1:8090/?name=cpc&age=21 利用js字符串操作函数进行解析 const myserver = require("ht ...

  2. BZOJ 2124 (线段树 + hash)

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2124 题意:给一个1到N的排列{Ai},询问是否存在1<=p1<p2< ...

  3. BZOJ 3217: ALOEXT (块状链表套trie)

    第一次写块状链表,发现还挺好写的,但是一点地方写错加上强制在线就会各种姿势WA/TLE/RE爆- 想法就是分块后,在每一个块上维护最大值和次大值,还在每一个块上维护一棵trie树来求异或最大值.散块直 ...

  4. Laravel中Contracts的理解和使用

    Laravel 的 Contracts 是一组定义了框架核心服务的接口.说白了就是一组接口.使用它就是为了降低耦合性. 即便如此,是不是也有同学会搞不清楚Contracts在lavarel体系中的到底 ...

  5. Spring中,请求参数处理

    Spring中,Controller里,获取请求数据有多种情况 在使用@RequestParam的方式获取请求中的参数时, 如果没有设置required这个属性,或者主动设置为true,则意味着这个参 ...

  6. compile cmdow

    1. http://www.commandline.co.uk/ https://github.com/ritchielawrence/cmdow/tarball/master 2. g++ -O2 ...

  7. ACM-ICPC 2018 南京赛区网络预赛Sum,线性筛处理积性函数

    SUM 题意:f(n)是n可以拆成多少组n=a*b,a和b都是不包含平方因子的方案数目,对于a!=b,n=a*b和n=b*a算两种方案,求∑i=1nf(i) 首先我们可以知道,n=1时f(1)=1, ...

  8. 灰度变换,gama变换,对数,反对数变换

    学习DIP第2天 灰度变换,及按照一定规则对像素点的灰度值进行变换,变换的结果可以增强对比度,或者达到其他的效果(例如二值化,或者伽马变换),由于灰度变换为针对单个像素点的灰度值进行变换,素以算法复杂 ...

  9. 【集训队作业2018】line

    DP方程十分简单,考虑前对后贡献即可. \(f_i = \min_{l_i \leq j < i} \left\{ f_j + \left(\max_{j < k \leq i} \lef ...

  10. 理解TCP三次握手和四次挥手

    TCP相关知识 TCP是面向连接的传输层协议,它提供可靠交付的.全双工的.面向字节流的点对点服务.HTTP协议便是基于TCP协议实现的.(虽然作为应用层协议,HTTP协议并没有明确要求必须使用TCP协 ...