Django框架进阶7 django请求生命周期流程图, django中间件, csrf跨站请求伪造, auth认证模块

django请求生命周期流程图

djang中间件

它是django的门户

只要是全局相关的功能你都应该考虑使用django中间件来帮你完成
  全局用户身份校验
  全局用户访问频率校验
  用户访问黑名单
  用户访问白名单

    # 只要以后用django开发业务 设计到全局相关的功能 你就考虑用中间件
        MIDDLEWARE = [
        ‘django.middleware.security.SecurityMiddleware‘,
        ‘django.contrib.sessions.middleware.SessionMiddleware‘,
        ‘django.middleware.common.CommonMiddleware‘,
        ‘django.middleware.csrf.CsrfViewMiddleware‘,
        ‘django.contrib.auth.middleware.AuthenticationMiddleware‘,
        ‘django.contrib.messages.middleware.MessageMiddleware‘,
        ‘django.middleware.clickjacking.XFrameOptionsMiddleware‘,
    ]

django支持用户自定义中间件(例)

        class SessionMiddleware(MiddlewareMixin):
            def process_request(self, request):

            def process_response(self, request, response):

        class CsrfViewMiddleware(MiddlewareMixin):
            def process_request(self, request):

            def process_view(self, request, callback, callback_args, callback_kwargs):

            def process_response(self, request, response):

        class AuthenticationMiddleware(MiddlewareMixin):
            def process_request(self, request):

django运行用户自定义中间件并且暴露给用户五个可以自定义的方法

            process_view
                路由匹配成功执行视图函数之前触发

            process_template_reponse
                视图函数返回的对象中必须要有render属性对应的render方法
                def index(request):
                    print(‘我是视图函数index‘)
                    def render():
                        return HttpResponse("你好啊 我是index里面的render函数")
                    obj = HttpResponse("index")
                    obj.render = render
                    return obj

            process_exception
                当视图函数报错的时候自动触发

            信号量

跨站请求伪造csrf

钓鱼网站
  本质搭建一个跟正常网站一模一样的页面
  用户在该页面上完成转账功能

  转账的请求确实是朝着正常网站的服务端提交
  唯一不同的在于收款账户人不同

  给用户书写form表单 对方账户的input没有name属性
  你自己悄悄提前写好了一个具有默认的并且是隐藏的具有name属性的input
模拟钓鱼网站

form表单如何通过csrf校验
  你只需要在你的form表单内写一个

{% csrf_token %}

ajax如何通过csrf校验

            // 第一种方式 自己手动获取
             {#data:{‘username‘:‘jason‘,‘csrfmiddlewaretoken‘:$(‘input[name="csrfmiddlewaretoken"]‘).val()},#}
            // 第二种方式 利用模板语法
            {#data:{‘username‘:‘jason‘,‘csrfmiddlewaretoken‘:‘{{ csrf_token }}‘},#}
            // 第三种     通用方式 引入外部js文件  官网提供的方式
            {% load static %}
            <script src="{% static ‘myset.js‘ %}"></script>
            data:{‘username‘:‘jason‘}

csrf相关装饰器

当我们网站整体都校验csrf的时候 我想让某几个视图函数不校验

当我们网站整体都不校验csrf的时候 我想让某几个视图函数校验

        from django.views.decorators.csrf import csrf_exempt, csrf_protect
        from django.views import View9
        from django.utils.decorators import method_decorator

        # @method_decorator(csrf_protect,name=‘post‘)  # 第二种指名道姓的给类中某个方法装
        # @method_decorator(csrf_exempt,name=‘post‘)  # csrf_exempt 第二种方式不行
        @method_decorator(csrf_exempt,name=‘dispatch‘)  # 可以!!!
        class MyHome(View):  # APIView
            # @method_decorator(csrf_protect)  # 第三种 类中所有的方法都装
            # @method_decorator(csrf_exempt)  # csrf_exempt 第三种方式可以
            def dispatch(self, request, *args, **kwargs):
                return super().dispatch(request,*args,**kwargs)

            def get(self,request):
                return HttpResponse(‘get‘)
            # @method_decorator(csrf_protect)  # 第一种方式
            # @method_decorator(csrf_exempt)  # csrf_exempt 第一种方式不行
            def post(self,request):
                return HttpResponse(‘post‘)

        """
        给CBV加装饰器 推荐你使用模块method_decorator
        我们自己写的装饰器和csrf_protect用法一致
        唯独csrf_exempt是一个特例 只能给dispatch方法装
        """    

auth模块

django用户相关的自带的功能模块   auth_user表

如何创建超级用户
  createsuperuser

模块导入

from django.contrib import auth
from django.contrib.auth.models import User

auth方法大全

            1.创建用户
                User.objects.create()  # 密码是明文
                User.objects.createuser()  # 基本都用它
                User.objects.createsuperuser()  # 邮箱要给数据

            2.校验用户名和密码是否正确
                auth.authenticate(username=username,password=password)  # 用户名和密码两个一个都不能少
                # 该方法当用户名和密码正确的时候返回的用户对象 不正确返回None

            3.保存用户登录状态
                auth.login(request,user_obj)  # 这一句执行之后 request.user获取当前登录的用户对象

            4.如何判断当前用户是否登录 以及如何获取当前登录用户对象
                request.user.is_authenticated()  # 判断是否登录
                request.user  # 登录用户对象

            5.校验用户是否登录
                from django.contrib.auth.decorators import login_required
                # 局部配置
                @login_required(login_url=‘/login/‘)
                def xxx(request):
                    return HttpResponse(‘xxx页面‘)

                # 全局配置
                配置文件中写以下代码
                LOGIN_URL = ‘/login/‘
                @login_required
                def xxx(request):
                    return HttpResponse(‘xxx页面‘)

                # 如果两个都设置了 那么优先执行局部配置

            6.修改密码
                request.user.check_password(old_password)  # 校验原密码是否正确

                request.user.set_password(new_password)
                request.user.save()                        # 一定要保存 

            7.注销功能
                auth.logout(request)

如何扩展auth_user表

        # 1 利用一对一表关系()

        # 2 利用类的继承
            # 1 类的继承
            from django.contrib.auth.models import User,AbstractUser
            # Create your models here.
            class Userinfo(AbstractUser):
                phone = models.BigIntegerField()
                avatar = models.FileField()
                # 扩展的字段 尽量不要与原先表中的字段冲突

            # 2 配置文件
            AUTH_USER_MODEL = ‘应用名.表名‘
            """
            django就会将userinfo表来替换auth_user表
            并且之前auth模块所有的功能不变 参照的也是userinfo表
            """

原文地址:https://www.cnblogs.com/ludingchao/p/12194891.html

时间: 2024-10-14 16:13:05

Django框架进阶7 django请求生命周期流程图, django中间件, csrf跨站请求伪造, auth认证模块的相关文章

☆Django☆---中间件 csrf跨站请求伪造 auth模块 settings功能插拔式源码

Django中间件 django生命周期图 中间件: 概念: Django中间件就类似于 django的保安   请求 的时候需要先经过中间件才能到达django后端(urls, views)   响应 走的时候也需要经过中间件才能到达web服务网关接口 django默认的七个中间件 MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.Session

Python Django 生命周期 中间键 csrf跨站请求伪造 auth认证模块 settings功能插拔式源码

一 django 生命周期 二 django中间键 1.什么是中间键 官方的说法:中间件是一个用来处理Django的请求和响应的框架级别的钩子.它是一个轻量.低级别的插件系统,用于在全局范围内改变Django的输入和输出.每个中间件组件都负责做一些特定的功能. 简单来说就相当于django门户,保安:它本质上就是一个自定义类,类中定义了几个方法. 请求的时候需要先经过中间件才能到达django后端(urls,views,templates,models): 响应走的时候也需要经过中间件才能到达w

Django框架之中间件、CSRF跨站请求伪造

一.中间件 1.什么是中间件 中间件是一个用来处理Django的请求和响应的框架级别的钩子.它是一个轻量.低级别的插件系统,用于在全局范围内改变Django的输入和输出.每个中间件组件都负责做一些特定的功能. 中间件是帮助我们在视图函数执行之前和执行之后都可以做一些额外的操作,它本质上就是一个自定义类,类中定义了几个方法,Django框架会在请求的特定的时间去执行这些方法. 2.Django中的中间件 django默认有7个中间件 MIDDLEWARE = [ 'django.middlewar

Django框架(十六)-- 中间件、CSRF跨站请求伪造

一.什么是中间件 中间件是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出 二.中间件的作用 如果你想修改请求,例如被传送到view中的HttpRequest对象. 或者你想修改view返回的HttpResponse对象,这些都可以通过中间件来实现. 可能你还想在view执行之前做一些操作,这种情况就可以用 middleware来实现. Django默认的中间件:(在django项目的settings模块中,有一个 MIDDLE

Django框架 之 基于Ajax中csrf跨站请求伪造

ajax中csrf跨站请求伪造 方式一 1 2 3 $.ajaxSetup({     data: {csrfmiddlewaretoken: '{{ csrf_token }}' }, }); 方式二 1 2 3 4 5 <form> {% csrf_token %} </form><br><br><br>$.ajax({<br>...<br>data:{ "csrfmiddlewaretoken":

Django中间件、csrf跨站请求伪造以及基于Django中间件思想实现功能的插拔式配置

一.django中间件 1.1解释:django中间件是类似于是django的保安,请求的时候需要先经过中间件才能到达django后端(urls,views,templates,models),响应走的时候也需要经过中间件才能到达web服务网关接口 1.2django默认的七个中间件 MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.Session

五十二、django 中间件,csrf跨站请求伪造,auth模块表

django 中间件 django中间件事类似django的保安,请求的时候需要先经过中间件才能到达django后端(urls,views,templates,models), 响应走的时候也需要经过中间件才能到达web服务网关接口 django中间件中有五个用户可以自定义的方法 django中间件可以用来做什么? 1.网站全局的身份校验,访问频率限制,权限校验..只要涉及到全局的校验都可以在中间件中完成 2.django的中间件是所有web框架中,做的最好 需要掌握的方法有: 1.proces

ajax向Django前后端提交请求和CSRF跨站请求伪造

1.ajax登录示例 urls.py from django.conf.urls import url from django.contrib import admin from app01 import views urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^login_ajax/$', views.login_ajax, name='login_ajax'), url(r'^index/$', views.index, n

理解CSRF(跨站请求伪造)

理解CSRF(跨站请求伪造) 原文出处Understanding CSRF 对于Express团队的csrf模块和csurf模块的加密函数的用法我们经常有一些在意. 这些在意是莫须有的,因为他们不了解CSRF token是如何工作的. 下面快速过一遍! 读过后还有疑问?希望告诉我们错误?请开一个issue! 一个CSRF攻击是如何工作的? 在他们的钓鱼站点,攻击者可以通过创建一个AJAX按钮或者表单来针对你的网站创建一个请求: <form action="https://my.site.c