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. 单例模式(Singleton)的同步锁synchronized

    单例模式,有“懒汉式”和“饿汉式”两种. 懒汉式 单例类的实例在第一次被引用时候才被初始化. public class Singleton { private static Singleton ins ...

  2. appium自动化 - android

    1. 获取driver appium通过生成driver来识别和操作app的UI元素.生成driver时,需要给出被测设备的相关信息.appium官方上的例子如下: https://github.co ...

  3. 使用 stringstream 进行类型转换

    如何用使用stringstream进行类型转换: 1. 下面例子为整型和sting类型的相互转换示例 整型转换为字符串类型 string NumberToString(int num){    str ...

  4. Codeforces Round #591 (Div. 2, based on Technocup 2020 Elimination Round 1) A. CME

    链接: https://codeforces.com/contest/1241/problem/A 题意: Let's denote correct match equation (we will d ...

  5. pip command not found

    [root@ Python-2.7.9]# pip install jinja2 -bash: pip: command not found 解决 [root@ ~]#  yum -y install ...

  6. HDU 6107 - Typesetting | 2017 Multi-University Training Contest 6

    比赛的时候一直念叨链表怎么加速,比完赛吃饭路上突然想到倍增- - /* HDU 6107 - Typesetting [ 尺取法, 倍增 ] | 2017 Multi-University Train ...

  7. springboot中使用spring security,登录url就出现403错误

    参考链接:https://segmentfault.com/q/1010000012743613 有两个controller,一个是所有用户可以访问的@RequestMapping("use ...

  8. 使用laravel-wechat微信支付

    参考文档 https://github.com/overtrue/laravel-wechat https://easywechat.com/docs/4.1/payment/index larave ...

  9. 单调栈求全1(或全0)子矩阵的个数 洛谷P5300与或和 P3400仓鼠窝

    爆零好爽,被中学生虐好爽,还好我毕业得早 求全1(或全0)子矩阵的个数,看了题解有好几种思路,我学了三种,但有两种不是很理解,而且也没另外那个跑得快,所以简单讲述一一下我会的那种来自Caro23333 ...

  10. noi 第n小的质数

    总时间限制:  1000ms 内存限制:  65536kB 描述 输入一个正整数n,求第n小的质数. 输入 一个不超过10000的正整数n. 输出 第n小的质数. 样例输入 10 样例输出 29 一定 ...