• 今日内容:

    •   通过中间件,给视图函数 增加 登陆验证,权限验证功能
    • 给中间件设置白名单,登陆视图函数不需要认证
    • 登陆之后,会把 用户名和权限列表存储在session中
    • 在中间件中完成 认证功能

from django.contrib import adminfrom app01 import models
# Register your models here.# 控制admin中的显示方式
class PermissionAdmin(admin.ModelAdmin):list_display = ['pk','title','url']   #告诉admin显示列表的哪些字段ordering = ['-pk']  #告诉admin 以什么方式排序class RoleAdmin(admin.ModelAdmin):list_display = ['pk','title']admin.site.register(models.User)
admin.site.register(models.Role, RoleAdmin)       #告诉admin以上面指定的方式展示列表
admin.site.register(models.Permission,PermissionAdmin)

admin

from django.db import models# Create your models here.class User(models.Model):name = models.CharField(max_length=32)pwd = models.CharField(max_length=32)roles = models.ManyToManyField('Role')def __str__(self):return self.nameclass Role(models.Model):title = models.CharField(max_length=32)permissions = models.ManyToManyField('Permission')def __str__(self):return self.titleclass Permission(models.Model):title = models.CharField(max_length=32)url = models.CharField(max_length=128)def __str__(self):return self.title

models.py

from django.shortcuts import render,HttpResponse,redirect
from django.views import View
from app01 import models# Create your views here.
class Login(View):          def get(self,request):return render(request,'login.html')def post(self,request):#step 1: 获取用户提交的用户名和密码user = request.POST.get('user')pwd = request.POST.get('pwd')#step 2: 根据用户名和密码取数据库中验证,相当于auth.authentacateuser_obj = models.User.objects.filter(name=user,pwd=pwd).first()if user_obj:#如果登陆成功, 将 用户名存到 session 中, 将 permission_llist存到session中request.session['user'] = user_obj.namepermission_obj =
models.Permission.objects.filter(role__user=user_obj)print(permission_obj)permission_list = [i.url for i in permission_obj]request.session['permission_list'] = permission_listreturn redirect(request.path)else:return render(request,'login.html',{'error':'用户名或密码错误'})class Record(View):def get(self,request):return render(request,'record.html')class AddRecords(View):def get(self,request):return render(request,'addrecords.html')class EditRecords(View):def get(self,request):return render(request,'editrecords.html')class DeleteRecords(View):def get(self,request):return render(request,'deletecustomer.html')class Customer(View):def get(self,request):return render(request, 'customer.html')
class AddCustomer(View):def get(self,request):return render(request,'addcustomer.html')
class EditCustomer(View):def get(self,request):return render(request,'editrecords.html')
class DeleteCustomer(View):def get(self,request):return render(request,'deletecustomer.html')

views

"""crm03 URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:https://docs.djangoproject.com/en/1.11/topics/http/urls/
Examples:
Function views1. Add an import:  from my_app import views2. Add a URL to urlpatterns:  url(r'^$', views.home, name='home')
Class-based views1. Add an import:  from other_app.views import Home2. Add a URL to urlpatterns:  url(r'^$', Home.as_view(), name='home')
Including another URLconf1. Import the include() function: from django.conf.urls import url, include2. Add a URL to urlpatterns:  url(r'^blog/', include('blog.urls'))
"""
from django.conf.urls import url
from django.contrib import admin
from app01 import viewsurlpatterns = [url(r'^admin/', admin.site.urls),url(r'^login/', views.Login.as_view(), name='login'),url(r'^record/$', views.Record.as_view(), name='record'),url(r'^record/add/', views.AddRecords.as_view(), name='addrecord'),url(r'^record/edit/', views.EditRecords.as_view(), name='editrecord'),url(r'^record/delete/', views.DeleteRecords.as_view(), name='deleterecord'),url(r'^customer/$', views.Customer.as_view(), name='customer'),url(r'^customer/add/', views.AddCustomer.as_view(), name='addcustomer'),url(r'^customer/edit/', views.EditCustomer.as_view(), name='editcustomer'),url(r'^customer/delete/', views.DeleteCustomer.as_view(), name='deletecustomer'),
]

urls

 1 from django.utils.deprecation import MiddlewareMixin
 2 import re
 3 from django.shortcuts import HttpResponse,redirect,render
 4
 5 class Md1(MiddlewareMixin):
 6
 7     def process_request(self,request):
 8
 9         #白名单放行
10         for i in ['/login/','/admin/',]:
11             ret = re.search(i,request.path)
12             print(ret,i)
13             if ret:
14                 print('判断之后:',ret,i)
15                 return None
16
17         #登录认证
18         user = request.session.get('user')
19         if not user:
20             return redirect('login')
21
22         #权限认证
23         for item in request.session.get('permission_list'):
24             print(item)
25             reg = f'^{item}$'
26             ret = re.search(reg,request.path)
27             if ret:
28                 return
29         else:
30             return HttpResponse('不好意思,权限不够,无权访问')

中间件

转载于:https://www.cnblogs.com/zhangjian0092/p/11024655.html

django crm 03相关推荐

  1. django进阶03静态文件和模板

    原创博文地址:django进阶03静态文件和模板 静态文件和模板 静态文件:css,js,image,如果作为纯粹的web应用来看,静态文件的响应并不属于web应用范畴,因为静态文件不涉及业务逻辑,也 ...

  2. Django实践-03模型-01表生成模型+学科页面与教师页面编写

    文章目录 Django实践-03模型 Django MTV之模型 投票案例 1.创建应用 1.创建应用 2.配置模板文件 2.配置关系型数据库MySQL 1.创建数据库 2.创建表 3.按照MySQL ...

  3. Django—CRM项目练习

    一.准备 1.创建django项目 命名为my_crm 2.配置app 命名为 crm 3.创建数据库 mysql : create database my_crm; 4.setting配置 stat ...

  4. Django CRM客户关系管理系统

    CRM需求分析 随着信息化时代带来的科技创新,CRM客户关系管理系统带来的效益在已经成为很多企业提高竞争优势的一分部,CRM客户关系管理系统将企业管理和客户关系管理集成到统一的平台,其系统功能主要体现 ...

  5. Django讲课笔记03:创建Django项目

    文章目录 零.本讲学习目标 一.课程导入 (一)Web框架 (二)WSGI 二.新课讲授 (一)使用内置指令创建Django项目 1.主要文件 (1)manage.py (2)init.py (3)a ...

  6. 零基础教你玩转Django之03篇 —— 完善Gua的API,分页和POST请求

    全网第一篇系列讲述Django线上项目实战的文章. 上一篇我们主要完成了Gua的API很简单的GET操作,那么这一节,我们要说这么几个东西: 使用RESTful API的规范来完善Gua的API 完善 ...

  7. django教程03

    <Django 教程> 讲师: 魏明择 时间: 2019 目录 静态文件 Django中的应用 - app 什么是应用(app) 创建应用app Django应用的结构组成 数据库 和 模 ...

  8. Django 的第三方包

    第三方仓库 Python Package Index(PyPI) Django 第三方包信息库 Django 项目中的 Requirements 文件中的依赖包一定要指定特定的版本号,如: Djang ...

  9. python全栈开发百度云_老男孩2020最新Python全栈开发基础班+就业班

    |- 数据结构+算法.rar - 485.30 MB |- 串讲.rar - 2.01 GB |- 补充资料.rar - 536.00 MB |- MongoDB.rar - 110.10 MB |- ...

最新文章

  1. 【组队学习】【24期】零基础入门语音识别(食物声音识别)
  2. 智源社区2022新版体验:订阅讲座日历、关注顶尖专家、开启个人频道
  3. 【HDU 1501】Zipper(记忆化搜索)
  4. Android进程优先级architecture : low memory killer (/system/core/lmkd/lmkd.c)
  5. 视频编码H.264的应用
  6. 尚学堂java 参考答案 第八章
  7. 如何查看2012服务器登录日志文件,怎样查看2012服务器远程过记录
  8. php oauth 扩展,PHP扩展之Web服务(一)——OAuth
  9. C++基本数据类型列表
  10. 汇总10.4版本ArcGIS Server与ArcMap 安装+SDE+注册数据源(非破解)
  11. ubuntu下C语言编程的注意点
  12. Keil 使用教程(详解)
  13. 吃透空洞卷积(Dilated Convolutions)
  14. oracle ap tp是什么,AP模式和Router模式区别是什么
  15. 如何成为一名区块链工程师? | 附学习资源
  16. html 实现3d效果代码,CSS3 3D环境实现立体 魔方效果代码
  17. 了解车辆驾驶行为、成功验证C-V2X技术
  18. 【ansys】如何隐藏网格?不显示网格?在仿真结果中隐藏网格?
  19. Qt编写安防视频监控系统55-布局方案
  20. Http协议和Python调试过程

热门文章

  1. NetPayClient for PHP使用说明
  2. 空间triangle和AABB的相交判定方法
  3. button属性,居然才发现
  4. 轮廓处理函数详细(转)
  5. 【Python】hello python!
  6. [Splay][线段树] jzoj P5662 尺树寸泓
  7. Mybatis sql注入问题
  8. Windows via C/C++ 学习(15)线程调度、线程优先级和亲缘性
  9. Python OpenCV人脸识别案例
  10. 《Head First 设计模式》学习笔记——状态模式