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

          

 

posted @ 2019-03-01 10:53  jacky912  阅读(166)  评论(0编辑  收藏  举报