zoukankan      html  css  js  c++  java
  • Django基础五之中间件

    具体代码.参照项目diango022多表图书

    1.在项目中新建一个文件夹.命名为middleware.放进app01中,并新建一个py.命名为middleware.py

    image-20200731152913422

     

    2.在middleware.py中写中间件.包含中间件请求时.用session.这样就不用装饰器。

    # _*_ coding : UTF-8 _*_
    #开发团队:zeng
    #开发人员:
    #开发时间:2020/7/31 11:06
    #文件名称:middleware.py
    #开发工具:PyCharm

    from django.utils.deprecation import MiddlewareMixin
    from django.shortcuts import HttpResponse,redirect
    from django.urls import reverse
    class M1(MiddlewareMixin):

       # 白名单
       write_list = [reverse('login')]
       def process_request(self,request):

           print('请求来了')
           path = request.path
           print(path)
           if path not in self.write_list:
               status = request.session.get('is_login')
               print(status)
               if not status:
                   return redirect('/login/')


    # 第二种
    #     def process_request(self, request):
    #         write_list = [reverse('login')]
    #         print('请求来了')
    #         path = request.path
    #         print(path)
    #         if path in write_list:
    #             self.__count = 0
    #             return None
    #         else:
    #
    #             status = request.session.get('is_login')
    #             print(status)
    #             if status:
    #                 return None
    #             else:
    #                 return redirect(reverse('login'))

       def process_response(self,request,response):
           print('响应要走了')
           return response

     

    3.在settings.py中把中间件注册

    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',
       'app01.middleware.middleware.M1',
    ]

     

    4.在views.py视图中.写了有多个cookis和session..包括是否有装饰器.

    from django.shortcuts import render,HttpResponse,redirect
    from app01 import models
    # Create your views here.

    # def wapper(f):
    #
    #     def inner(request,*args,**kwargs):
    #         print(request.COOKIES)
    #         is_login = request.COOKIES.get('is_login')
    #         if is_login == 'True':
    #             ret = f(request,*args,**kwargs)
    #             return ret
    #
    #         else:
    #             return redirect('login')
    #
    #     return inner

    #
    # # @wapper
    # def books(request):
    #     if request.method == 'GET':
    #         book_obj = models.Book.objects.all()
    #         return render(request,'books.html',{'book_obj':book_obj})
    #
    # # @wapper
    # def add_book(request):
    #     if request.method == 'GET':
    #         publish_all = models.Publish.objects.all()
    #         author_all = models.Author.objects.all()
    #         return render(request,'add_book.html',{'publish_all':publish_all,'author_all':author_all})
    #
    #     else:
    #         print(request.POST)
    #         authons_obj = request.POST.getlist('authors')
    #         # print(authons_obj)
    #
    #         data_obj = request.POST.dict()
    #         del data_obj['csrfmiddlewaretoken']
    #         del data_obj['authors']
    #
    #         new_data_obj = models.Book.objects.create(
    #             **data_obj
    #         )
    #         new_data_obj.authors.add(*authons_obj)
    #
    #         return redirect('books')
    #
    #
    # # @wapper
    # def edit_book(request,book_id):
    #     book_obj = models.Book.objects.filter(pk=book_id)
    #     if request.method == 'GET':
    #         book_obj = book_obj.first()
    #         publish_obj = models.Publish.objects.all()
    #         authors_obj = models.Author.objects.all()
    #
    #         return render(request,'edit_book.html',{'book_obj':book_obj,'publish_obj':publish_obj,'authors_obj':authors_obj})
    #
    #     else:
    #         print(request.POST)
    #         author_obj = request.POST.getlist('authors')
    #         data_obj = request.POST.dict()
    #         del data_obj['csrfmiddlewaretoken']
    #         del data_obj['authors']
    #         book_obj.update(
    #             **data_obj
    #         )
    #         book_obj.first().authors.set(author_obj)
    #
    #         return redirect('books')
    #
    # # @wapper
    # def del_book(request,book_id):
    #     models.Book.objects.filter(pk=book_id).delete()
    #     return redirect('books')
    #
    #
    # # cookie
    #
    #
    # # def login(request):
    # #     if request.method =='GET':
    # #         return render(request,'login.html')
    # #
    # #     else:
    # #         # print(request.POST)
    # #         username = request.POST.get('username')
    # #         pwd = request.POST.get('password')
    # #
    # #         if username =='123' and pwd == '123':
    # #             print('ok')
    # #             ret = redirect('books')
    # #             ret.set_cookie('is_login',True,10) #100秒是超过后失效
    # #             return ret
    # #         else:
    # #
    # #
    # #             return redirect('login')

    #=================================================================================================================
    # session 模式
    # 用于用户检验,短信验证过期,权限管理

    # session 模式的装饰器
    # def wapper(f):
    #
    #     def inner(request,*args,**kwargs):
    #         print(request.session)
    #         # is_login = request.COOKIES.get('is_login')
    #         is_login = request.session.get('is_login')
    #         if is_login == True:
    #             ret = f(request,*args,**kwargs)
    #             return ret
    #
    #         else:
    #             return redirect('login')
    #
    #     return inner
    #
    #
    #
    #
    # def login(request):
    #     if request.method =='GET':
    #         return render(request,'login.html')
    #
    #     else:
    #         # print(request.POST)
    #         username = request.POST.get('username')
    #         pwd = request.POST.get('password')
    #
    #         if username =='123' and pwd == '123':
    #
    #             # ret = redirect('books')
    #             # ret.set_cookie('is_login',True,10) #100秒是超过后失效
    #             request.session['is_login'] = True
    #             request.session.set_expiry(1000) #设置时间.如整数的话.是秒.如时间的话
    #             '''
    #     * 如果value是个整数,session会在些秒数后失效。
    #     * 如果value是个datatime或timedelta,session就会在这个时间后失效。
    #     * 如果value是0,用户关闭浏览器session就会失效。
    #     * 如果value是None,session会依赖全局session失效策略。
    #
    #             '''
    #             # request.session['user']
    #
    #             return redirect('books')
    #         else:
    #
    #
    #             return redirect('login')
    #
    # # 用装饰器
    # @wapper
    # def books(request):
    #
    #     if request.method == 'GET':
    #         book_obj = models.Book.objects.all()
    #         return render(request,'books.html',{'book_obj':book_obj})
    #
    # @wapper
    # def add_book(request):
    #
    #     if request.method == 'GET':
    #         publish_all = models.Publish.objects.all()
    #         author_all = models.Author.objects.all()
    #         return render(request,'add_book.html',{'publish_all':publish_all,'author_all':author_all})
    #
    #     else:
    #         print(request.POST)
    #         authons_obj = request.POST.getlist('authors')
    #         # print(authons_obj)
    #
    #         data_obj = request.POST.dict()
    #         del data_obj['csrfmiddlewaretoken']
    #         del data_obj['authors']
    #
    #         new_data_obj = models.Book.objects.create(
    #             **data_obj
    #         )
    #         new_data_obj.authors.add(*authons_obj)
    #
    #         return redirect('books')
    #
    # @wapper
    # def edit_book(request,book_id):
    #
    #     book_obj = models.Book.objects.filter(pk=book_id)
    #     if request.method == 'GET':
    #         book_obj = book_obj.first()
    #         publish_obj = models.Publish.objects.all()
    #         authors_obj = models.Author.objects.all()
    #
    #         return render(request,'edit_book.html',{'book_obj':book_obj,'publish_obj':publish_obj,'authors_obj':authors_obj})
    #
    #     else:
    #         print(request.POST)
    #         author_obj = request.POST.getlist('authors')
    #         data_obj = request.POST.dict()
    #         del data_obj['csrfmiddlewaretoken']
    #         del data_obj['authors']
    #         book_obj.update(
    #             **data_obj
    #         )
    #         book_obj.first().authors.set(author_obj)
    #
    #         return redirect('books')
    #
    # @wapper
    # def del_book(request,book_id):
    #
    #     models.Book.objects.filter(pk=book_id).delete()
    #     return redirect('books')


    # 以下是不用装饰器
    # =============================================================================
    # def books(request):
    #     is_login = request.session.get('is_login')
    #     if is_login== True:
    #
    #         if request.method == 'GET':
    #             book_obj = models.Book.objects.all()
    #             return render(request,'books.html',{'book_obj':book_obj})
    #
    #     else:
    #         return redirect('login')




    # def add_book(request):
    #     is_login = request.session.get('is_login')
    #     if is_login == True:
    #         if request.method == 'GET':
    #             publish_all = models.Publish.objects.all()
    #             author_all = models.Author.objects.all()
    #             return render(request,'add_book.html',{'publish_all':publish_all,'author_all':author_all})
    #
    #         else:
    #             print(request.POST)
    #             authons_obj = request.POST.getlist('authors')
    #             # print(authons_obj)
    #
    #             data_obj = request.POST.dict()
    #             del data_obj['csrfmiddlewaretoken']
    #             del data_obj['authors']
    #
    #             new_data_obj = models.Book.objects.create(
    #                 **data_obj
    #             )
    #             new_data_obj.authors.add(*authons_obj)
    #
    #             return redirect('books')
    #     else:
    #         return redirect('login')



    # def edit_book(request,book_id):
    #     is_login = request.session.get('is_login')
    #     if is_login == True:
    #         book_obj = models.Book.objects.filter(pk=book_id)
    #         if request.method == 'GET':
    #             book_obj = book_obj.first()
    #             publish_obj = models.Publish.objects.all()
    #             authors_obj = models.Author.objects.all()
    #
    #             return render(request,'edit_book.html',{'book_obj':book_obj,'publish_obj':publish_obj,'authors_obj':authors_obj})
    #
    #         else:
    #             print(request.POST)
    #             author_obj = request.POST.getlist('authors')
    #             data_obj = request.POST.dict()
    #             del data_obj['csrfmiddlewaretoken']
    #             del data_obj['authors']
    #             book_obj.update(
    #                 **data_obj
    #             )
    #             book_obj.first().authors.set(author_obj)
    #
    #             return redirect('books')
    #     else:
    #         return redirect('login')



    # def del_book(request,book_id):
    #     is_login = request.session.get('is_login')
    #     if is_login == True:
    #
    #         models.Book.objects.filter(pk=book_id).delete()
    #         return redirect('books')
    #     else:
    #         return redirect('login')


    def logout(request):
       request.session.flush()
       return redirect('login')

    #================================================================================
    # 第三种..用中间件来session.就不需要写装饰器了.

    def login(request):
       if request.method == 'GET':
           return render(request, 'login.html')

       else:
           # print(request.POST)
           username = request.POST.get('username')
           pwd = request.POST.get('password')

           if username == '123' and pwd == '123':

               # ret = redirect('books')
               # ret.set_cookie('is_login',True,10) #100秒是超过后失效
               request.session['is_login'] = True
               request.session.set_expiry(1000)  # 设置时间.如整数的话.是秒.如时间的话
               '''
      * 如果value是个整数,session会在些秒数后失效。
      * 如果value是个datatime或timedelta,session就会在这个时间后失效。
      * 如果value是0,用户关闭浏览器session就会失效。
      * 如果value是None,session会依赖全局session失效策略。

              '''
               # request.session['user']

               return redirect('books')
           else:

               return redirect('login')




    def books(request):
       if request.method == 'GET':
           print('book函数')
           book_obj = models.Book.objects.all()
           return render(request,'books.html',{'book_obj':book_obj})


    def add_book(request):
       if request.method == 'GET':
           print('add_book函数')
           publish_all = models.Publish.objects.all()
           author_all = models.Author.objects.all()
           return render(request,'add_book.html',{'publish_all':publish_all,'author_all':author_all})

       else:
           print(request.POST)
           authons_obj = request.POST.getlist('authors')
           # print(authons_obj)

           data_obj = request.POST.dict()
           del data_obj['csrfmiddlewaretoken']
           del data_obj['authors']

           new_data_obj = models.Book.objects.create(
               **data_obj
          )
           new_data_obj.authors.add(*authons_obj)

           return redirect('books')



    def edit_book(request,book_id):
       book_obj = models.Book.objects.filter(pk=book_id)
       if request.method == 'GET':
           print('edit_book函数')
           book_obj = book_obj.first()
           publish_obj = models.Publish.objects.all()
           authors_obj = models.Author.objects.all()

           return render(request,'edit_book.html',{'book_obj':book_obj,'publish_obj':publish_obj,'authors_obj':authors_obj})

       else:
           print(request.POST)
           author_obj = request.POST.getlist('authors')
           data_obj = request.POST.dict()
           del data_obj['csrfmiddlewaretoken']
           del data_obj['authors']
           book_obj.update(
               **data_obj
          )
           book_obj.first().authors.set(author_obj)

           return redirect('books')

    def del_book(request,book_id):
       models.Book.objects.filter(pk=book_id).delete()
       return redirect('books')
  • 相关阅读:
    mybatis常用配置
    初识mybatis(二)
    初识mybatis
    Android开发——Android中的二维码生成与扫描
    [原]openstack-kilo--issue(六):Authorization Failed: The resource could not be found. (HTTP 404)
    [转]正确配置Linux系统ulimit值的方法
    [原]ubuntu14.04 网卡逻辑修改没有文件/etc/udev/rules.d/70-persistent-net.rules
    [转][原]openstack-kilo--issue(六)kilo版openstack的dashboard在session超时后重新登录报错解决办法
    [转]观察进程的内存占用情况
    [转]Linux下权限掩码umask
  • 原文地址:https://www.cnblogs.com/zengluo/p/13410052.html
Copyright © 2011-2022 走看看