zoukankan      html  css  js  c++  java
  • Django的中间件(middleware)

    中间件(middleware)

      在Django中,中间件其实就是一个类。在请求到来和结束后,Django会根据自己的规则在合适的时机执行中间件中相应的方法。

      在Django项目的settings模块中,有一个 MIDDLEWARE_CLASSES 变量,其中每一个元素就是一个中间件,如下图。

        

      与mange.py在同一目录下的文件夹 wupeiqi/middleware下的auth.py文件中的Authentication类。

      中间件中可以定义四个方法,分别是:

        process_request(self,request)

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

        process_exception(self, request, exception)

        process_response(self, request, response)

      以上方法的返回值可以是None和HttpResonse对象,如果是None,则继续按照django定义的规则向下执行,如果是HttpResonse对象,则直接将该对象返回给用户。

                               

      自定义中间件

        1.创建中间件类

              class RequestExeute(object):

            def process_request(self,request):
                pass
            def process_view(self, request, callback, callback_args, callback_kwargs):
                =1
                pass
            def process_exception(self, request, exception):
                pass
            def process_response(self, request, response):
                return response

        2.注册中间件

           MIDDLEWARE_CLASSES = (

               'django.contrib.sessions.middleware.SessionMiddleware',
               'django.middleware.common.CommonMiddleware',
               'django.middleware.csrf.CsrfViewMiddleware',
               'django.contrib.auth.middleware.AuthenticationMiddleware',
               'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
               'django.contrib.messages.middleware.MessageMiddleware',
               'django.middleware.clickjacking.XFrameOptionsMiddleware',
               'wupeiqi.middleware.auth.RequestExeute',
           )

    admin

      django amdin是django提供的一个后台管理页面,改管理页面提供完善的html和css,使得你在通过Model创建完数据库表之后,就可以对数据进行增删改查,而使用django admin 则需要以下步骤:

        1.创建后台管理员

          python manage.py createsuperuser

        2.配置url

          url(r'^admin/', include(admin.site.urls))

        3.注册和配置django admin后台管理页面

          a.在admin中执行如下配置

            from django.contrib import admin

               from app01 import  models
              admin.site.register(models.UserType)
            admin.site.register(models.UserInfo)
            admin.site.register(models.UserGroup)
            admin.site.register(models.Asset)

          b.设置数据表名称

            class UserType(models.Model):

                name = models.CharField(max_length=50)
     
                class Meta:
                    verbose_name = '用户类型'
                    verbose_name_plural = '用户类型'

          c.打开表之后,设定默认显示,需要在model中作如下配置

            class UserType(models.Model):

                name = models.CharField(max_length=50)
     
                def __unicode__(self):
                    return self.name
            from django.contrib import admin
     
            from app01 import  models
     
            class UserInfoAdmin(admin.ModelAdmin):
                list_display = ('username''password''email')
             admin.site.register(models.UserType)
            admin.site.register(models.UserInfo,UserInfoAdmin)
            admin.site.register(models.UserGroup)
            admin.site.register(models.Asset)

          d.为数据表添加搜索功能

            from django.contrib import admin

             from app01 import  models
             class UserInfoAdmin(admin.ModelAdmin):
                list_display = ('username''password''email')
                search_fields = ('username''email')
             admin.site.register(models.UserType)
            admin.site.register(models.UserInfo,UserInfoAdmin)
            admin.site.register(models.UserGroup)
            admin.site.register(models.Asset)

          e.添加快速过滤

            from django.contrib import admin

             from app01 import  models
     
            class UserInfoAdmin(admin.ModelAdmin):
                list_display = ('username''password''email')
                search_fields = ('username''email')
                list_filter = ('username''email')
               admin.site.register(models.UserType)
            admin.site.register(models.UserInfo,UserInfoAdmin)
            admin.site.register(models.UserGroup)
            admin.site.register(models.Asset)

        完善主机管理系统:

          1.登陆注册(利用ajax实现,使用onblur事件,检测当前用户名是否已经存在)

      用户会话保持(Session)

          3. Form验证用户输入

          4.自定义中间件记录请求IP(或黑名单)

          5.用户管理、用户组管理、主机管理(增删改查,分页)

          6.自定义页面表格行数(可选)

    跨站请求伪造

      简介:django为用户实现防止跨站请求伪造的功能,通过中间件 django.middleware.csrf.CsrfViewMiddleware 来完成。而对于django中设置防跨站请求伪造功能有分为全局和局部。

      全局:

        中间件 django.middleware.csrf.CsrfViewMiddleware

      局部:

        @csrf_protect,为当前函数强制设置防跨站请求伪造功能,即便settings中没有设置全局中间件

        @csrf_exempt,取消当前函数防跨站请求伪造功能,即便settings中设置了全局中间件。

       注:from django.views.decorators.csrf import csrf_exempt,csrf_protect

      应用:

        1.普通表单

          veiw中设置返回值:

            return render_to_response('Account/Login.html',data,context_instance=RequestContext(request))  
     
          html中设置Token:
            {% csrf_token %}

        2.Ajax

          对于传统的form,可以通过表单的方式将token再次发送到服务端,而对于ajax的话,使用如下方式

          view.py

              from django.template.context import RequestContext

              # Create your views here.
     
                 def test(request):
     
                  if request.method == 'POST':
                      print request.POST
                      return HttpResponse('ok')
                  return  render_to_response('app01/test.html',context_instance=RequestContext(request))

          text.html

              

  • 相关阅读:
    spark连接MongoDB
    idea+scala+spark遇到的一些问题
    linux环境变量的配置
    sqoop的导入导出
    hive中一些常用的sql语句
    Unity 插件制作笔记(持续更新)
    linux-shutdown命令说明
    linux中的redis缓存服务器
    IceScrum敏捷开发工具的安装文档-官方最新版
    PHP设计模式系列
  • 原文地址:https://www.cnblogs.com/jacky912/p/10455128.html
Copyright © 2011-2022 走看看