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. 分别用命令行、NetBeans IDE 8.2实现firstcup 项目部署

    准备工作要搞好,对吧!(如下:) firstcup项目代码文件下载链接:click me~ NetBeans IDE 8.2下载链接:点我~(ps:建议下载此版本,再安装过程中,要选择安装GlassF ...

  2. java的AES对称加密和解密,有偏移量

    import java.math.BigDecimal; import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; i ...

  3. 我的代码-random forest

    # coding: utf-8 # In[1]: import pandas as pdimport numpy as npfrom sklearn import treefrom sklearn.s ...

  4. Spring(转载二)

    在网上看到一篇文章,感觉写得挺不错的,转载一下,本文转载自:http://blog.csdn.net/m13666368773/article/details/7802126 一. IoC理论的背景 ...

  5. 【开发】iOS入门 - XCode快捷键

    XCode使用第一天,从熟悉快捷键开始... 搜索相关的快捷键: 搜文件.类和方法 - Command + Shift + O 搜字符串 - Command + Shift + F 定位文件 - Co ...

  6. c++中thread的死法

    在调用thread后,不调用join()函数时, 线程的两种行为:1)自己管理join()函数  2)生成后不管理,线程完了自己杀死自己detach()函数.使用detach()时,线程比较简单,一般 ...

  7. docker WARNING: IPv4 forwarding is disabled. 解决方法

    WARNING: IPv4 forwarding is disabled. Networking will not work. 在宿主机添加如下信息 echo net.ipv4.ip_forward= ...

  8. obs源码uml

  9. [转]Centos 7 安装部署 GitLab 服务器

    Centos 7 安装部署 GitLab 服务器 转自:https://www.jianshu.com/p/79bfded68899 文前说明 作为码农中的一员,需要不断的学习,我工作之余将一些分析总 ...

  10. OpenStack控制节点上搭建Q版glance服务(step4)

    glance服务监听两个端口:9191和9292 其中9292端口是对外提供服务的,9191是服务组件间使用的. 1.安装glance组件 yum --enablerepo=centos-openst ...