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

              

  • 相关阅读:
    Python 学习日记 第七天
    Python 学习日记 第六天
    Python 学习日记 第五天
    Python 学习日记 第四天
    Redis 中的数据类型及基本操作
    Asp.net mvc 中View 的呈现(二)
    Asp.net mvc 中View的呈现(一)
    Asp.net mvc 中Action 方法的执行(三)
    Asp.net mvc 中Action 方法的执行(二)
    Asp.net mvc 中Action 方法的执行(一)
  • 原文地址:https://www.cnblogs.com/jacky912/p/10455128.html
Copyright © 2011-2022 走看看