Django框架之中间件与Auth模块
一 cbv加装饰器
 -先导入:from django.utils.decorators import method_decorator
 -1 可以在方法上加装饰器:
  @method_decorator(login_auth)
 -2 可以在类上加
  @method_decorator(login_auth,name='post')
  @method_decorator(login_auth,name='get')
 -3 可以加在dishpatch方法上
  @method_decorator(login_auth)
  一旦加在dishpatch,说明,所有方法都加了装饰器
   
二 中间件
 -中间件是什么?请求和响应之间的一道屏障
 -中间件作用:控制请求和响应
 -django中内置几个中间件
 -自定义中间件
  -from django.utils.deprecation import MiddlewareMixin   先导入
  -定义一个类,随意命名,继承MiddlewareMixin
  class MyMiddleware1(MiddlewareMixin):
   def process_request(self, request):
    print('MyMiddleware---->1---->process_request')
    # 返回HttpRspons对象,直接返回,走自己的process_response
    # 返回None的时候,继续往下走
    # return HttpResponse('i am middle--1')
    return None
   def process_response(self, request, response):
    print('MyMiddleware--->1---->process_response')
    return response
  -使用:在setting中注册,是有顺序的,
   MIDDLEWARE = [
   'app01.mymiddelware.MyMiddleware1',]  
 -中间件执行顺序:
  -process_request,从上往下执行
   -如果retrun HttpResponse的对象,直接返回了
   -如果retrun None ,继续往下走
  -process_response,从下往上执行
   -必须要retrun Httpresponse的对象
 -中间件的方法:()
  -process_request
   -请求来的时候,会响应它
  -process_response
   -响应回去的时候,会走它
  -process_view(了解)
   - request, callback(视图函数), callback_args(无名分组的参数), callback_kwargs(有名分组的参数)
   -执行顺序,详见图
  -def process_exception(self, request, exception)(了解)
  -def process_template_response(self, request, response):(了解)
三 csrf:跨站请求伪造 
 比如:转账请求:transfer?to=lqz&count=1000
 -是什么?攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的
 -如何防范:
  -通过refer
  -加一个随机字符串校验(加载请求的路径里,加载请求体中)
  -在请求头中加字符串校验
 django中的应用:
  -中间件不注释掉
  -以后再发post请求,携带那个随机字符串
   -form表单形式:
    <form action="" method="post">
     {% csrf_token %}
     <input type="text" name="name">
     <input type="text" name="pwd">
     <input type="submit" value="提交">
    </form>
   -ajax提交
   data: {
    'name': $('[name="name"]').val(),
    'pwd': $('[name="pwd"]').val(),
    //'csrfmiddlewaretoken': $('[name="csrfmiddlewaretoken"]').val()
    'csrfmiddlewaretoken': '{{ csrf_token }}'
    },
 csrf:局部禁用,局部使用
  -用装饰器:from django.views.decorators.csrf import csrf_exempt,csrf_protect
  -fbv--->直接加载fbv上就行了
   -局部禁用,全局得使用
    @csrf_exempt
    def csrf_disable(request):
      print(request.POST)
      return HttpResponse('ok')
   -局部使用,全局得禁用
    @csrf_protect
    def csrf_disable(request):
      print(request.POST)
      return HttpResponse('ok')
  -cbv-->只能加在dispatch方法或者类上面
   -局部禁用,全局得使用
   -局部使用,全局得禁用
   from django.views import View
   from django.utils.decorators import method_decorator
   @method_decorator(csrf_protect,name='dispatch')
   class Csrf_disable(View):
    # @method_decorator(csrf_protect)
    def dispatch(self, request, *args, **kwargs):
     ret=super().dispatch(request, *args, **kwargs)
     return ret
    def get(self,request):
     return HttpResponse('ok')
    def post(self,request):
     return HttpResponse('post---ok')
四 auth组件
 -auth是什么?
 -django内置的用户认证系统,可以快速的实现,登录,注销,修改密码....
 -怎么用?
  -(1)先创建超级用户:
   -python3 manage.py createsuperuser
   -输入用户名,邮箱(可以不输入),密码,敲回车,这样就创建出一个超级用户
   -也就是在auth_user这个表中插入了一条数据(密码是加密的,所以我不能手动插入)
  -(2)验证用户:
   -from django.contrib import auth
   -user = auth.authenticate(request, username=name, password=pwd)
   -相当于在查询:user=models.User.objects.filter(name=name,pwd=pwd).first()
   -如果校验通过,会返回一个user对象,通过判断user对象,校验是否验证成功
  -(3)登录
   -auth.login(request,user)
   -其实就是在session中写了一条数据
  -(4)一旦登录成功,调了这个函数login(request,user)
   -以后再视图类,函数中的request对象中,就有一个user对象,就是当前登录的用户对象
   -如果没有登录,request.user=AnonymousUser,匿名用户
  -(5)注销
   -auth.logout(request)
   -内部:调用了request.session.flush(),删除了登录状态
  -(6)登录认证装饰器
   -from django.contrib.auth.decorators import login_required
   -@login_required(redirect_field_name='eee',login_url='/login/')
   -redirect_field_name:修改?后面的key值,
   -login_url:如果没有登录,跳转到的页面
    -可以局部配置
    -可以全局配置(在setting中)
     # 全局的配置,如果没有登录,跳到这个路由
     LOGIN_URL='/login/'
  -(7)创建用户:
   -from django.contrib.auth.models import User    
   - 创建超级用户和普通用户
    # 不能用create
    # user=User.objects.create(username=name,password=pwd)
    # 创建超级用户
    # user=User.objects.create_superuser(username=name,password=pwd)
    # 创建普通用户
    user=User.objects.create_user(username=name,password=pwd)
  -(8)校验密码
   -request.user.check_password(pwd)
   -先拿到用户(可以是登录用户,可以现查)
  -(9)修改密码:
   -user.set_password(pwd)
   -user.save()
   -注意:一定要调用save(),否则是不保存的
  -(10)is_authenticated()
   -如果通过验证,是true反之false
  -(11)其他方法(了解):
   -is_active:禁止登录网站(用户还存在,封号)
   -is_staff:是否对网站有管理权限(能不能登录admin)
   
  -(12)删除用户
   -orm删除
 如果想在认证组件上加手机号等其他字段:如何处理
  -(1) 定义一个表模型,跟User一对一管理
   class UserDetail(models.Model):
    phone=models.CharField(max_length=32)
    # 一对一跟auth_user表做关联
    # 如果是从外部引入的表模型,是不能加引号的
    # 如果加引号,只是在当前model找
    user=models.OneToOneField(to=User)
  -(2)定义一个表模型,继承(AbstractUser)
   -from django.contrib.auth.models import AbstractUser
    class UserInfo(AbstractUser):
    # username,password...都有
    phone=models.CharField(max_length=32)
    sex=models.BooleanField()
   -在setting中配置:
    AUTH_USER_MODEL ='app01.UserInfo'
   -做数据库迁移,以后就没有auth_user这个表了,以后认证组件用的表就是UserInfo
   -原来auth中的其他操作:
    -authentication
    -login
    -logout
    -set_password
    ....
    ---一样用,完全一样
   -不一样的地方:
    如果之前用到User这个表模型的地方,都换成UserInfo
     
博客项目:
 1 需求分析
  -首页(显示文章)
  -文章详情
  -点赞,点踩
  -文章评论
   -字评论
   -评论的展示
  -登录功能(图片验证码)
  -注册功能(基于form验证,ajax)
  -个人站点(不同人不同样式,文章过滤)
  -后台管理:
   -文章展示
  -新增文章
   -富文本编辑器
  
  
  
 2 设计程序(框架,数据库设计)
  -UserInfo----用户表
  -blog-----个人站点表
  -Article----文章表
  -commit----评论表
  -upanddown----点赞点踩表
  -category---文章分类表
  -tag---文章标签表
  -表关系
   -userInfo跟blog ---- 一对一
   -article跟blog-----一对多
   -article跟category----(一篇文章只能由一个分类,一个分类下有多篇文章)一对多
   -article跟tag----(一个标签可以对应多篇文章,一篇文章可以有多个标签)多对多
   -commit跟Article----  一对多
   -upanddown跟Article----  一对多
   -user跟commit---一对多
   -user跟upanddown---一对多
   -category跟blog----一对多
   -tag跟blog----一对多
   
 3 分任务开发(git)
 4 测试

Django框架之中间件与Auth的更多相关文章

  1. 第三百一十六节,Django框架,中间件

    第三百一十六节,Django框架,中间件 django 中的中间件(middleware),在django中,中间件其实就是一个类,在请求到来和结束后,django会根据自己的规则在合适的时机执行中间 ...

  2. Django框架 之 中间件

    Django框架 之 中间件 浏览目录 中间件介绍 自定义中间件 中间件的执行流程 中间件版登录验证 一.中间件介绍 官方的说法:中间件是一个用来处理Django的请求和响应的框架级别的钩子.它是一个 ...

  3. python3开发进阶-Django框架的中间件的五种用法和逻辑过程

    阅读目录 什么是中间件 中间件的执行流程 中间件的逻辑过程 一.什么是中间件? 官方的说法:中间件是一个用来处理Django的请求和响应的框架级别的钩子.它是一个轻量.低级别的插件系统,用于在全局范围 ...

  4. Django框架之中间件MiddleWare

    Django中的中间件是一个轻量级.底层的插件系统,可以介入Django的请求和响应处理过程,修改Django的输入或输出.中间件的设计为开发者提供了一种无侵入式的开发方式,增强了Django框架的健 ...

  5. django框架进阶-中间件-长期维护

    ##################    为什么使用中间件?      ####################### 先说几个需求, 1,url的白名单,url=[ "XX"] ...

  6. django框架之中间件

    中间件简介 django 中的中间件(middleware),在django中,中间件其实就是一个类,在请求到来和结束后,django会根据自己的规则在合适的时机执行中间件中相应的方法. 在djang ...

  7. 十四 Django框架,中间件

    django 中的中间件(middleware),在django中,中间件其实就是一个类,在请求到来和结束后,django会根据自己的规则在合适的时机执行中间件中相应的方法. 在django项目的se ...

  8. Django之csrf中间件及auth模块使用

    目录 一.基于配置文件的编程思想 1. importlib 模块 2. 配置文件 二.跨站请求伪造(csrf) 1.csrf简介以及由来 2.Django中的csrf中间件如何使用 2.1 普通for ...

  9. Django框架(十三)——Auth模块

    Auth模块 一.什么是auth模块 Auth模块是Django自带的用户认证模块 Auth模块是Django自带的用户认证模块,可以实现包括用户注册.用户登录.用户认证.注销.修改密码等功能.默认使 ...

随机推荐

  1. python多进程拷贝数据

    from multiprocessing import Pool,Manager import os #完成拷贝文件 def copyFile(filename,oldname,newname,que ...

  2. MATLAB 进行五种边缘检测

    自定义函数: function []=edge_detect(image_name) a=imread(image_name); I=rgb2gray(a); BW1=edge(I,'Roberts' ...

  3. Css新增内容

    css3新增属性 可节省设计时间的属性 border-color:控制边框的颜色,并且有更大的灵活性,可以产生渐变效果 border-image:控制边框图像 border-radius:能产生类似圆 ...

  4. Hello2实例的分析

    首先: java EE 上的hello2项目是一个部署在glass fish上的开发源码的java web项目,在终端通过命令行使用maven进行打包成.war文件,最后部署到相关的glass fis ...

  5. zoj 2524 并查集裸

    Description There are so many different religions in the world today that it is difficult to keep tr ...

  6. FlexRay通信机制

    通信周期是 FlexRay 的基本通信单元[6~7,19].每个通信周期包括四个时间层,如图 2-9 所示.通信周期由静态段(Static Segment).动态段(Dynamic Segment). ...

  7. find命令简单使用

    find命令是Linux系统查找文件的命令,能帮助用户在使用.管理Linux的日常事务时方便的查找出用户所需要的文件,find命令基本格式是:find [路径] [选项] [操作]. 列举一下find ...

  8. visual studio 2017 中默认无法开发 Android 8.0 及以上系统的解决方案

    一般默认比较旧有两个原因,系统版本过旧,Visual Studio 版本过旧. 第一步,将windows 更新到最新版,必须是windows 10 并且更新到最新. 第二步,将visual studi ...

  9. python发送短信和发送邮件

    先注册好 发短信脚本内容 #接口类型:互亿无线触发短信接口,支持发送验证码短信.订单通知短信等. #账户注册:请通过该地址开通账户http://sms.ihuyi.com/register.html ...

  10. 1.2.8 Excel做个滚动抽奖

    1.首先要准备好数据库: 2.用RAND函数来生成随机数字,做一个辅助列: 3.制作抽奖界面: 4.输入公式: 在F3中输入下列公式并填充至F5: =INDEX(A:A,MATCH(SMALL(B:B ...