• Django中间件


    基于装饰器

     # views.py
    1
    from django.shortcuts import render, redirect, HttpResponse 2 from app01.forms import LoginForm 3 from app01 import models 4 from django.conf import settings 5 from utils.md5 import md5 6 7 8 def auth(func): 9 def inner(request,*args,**kwargs): 10 user_info = request.session.get(settings.USER_SEESION_KEY) 11 if not user_info: 12 return redirect('/login/') 13 res = func(*args,**kwargs) 14 return res 15 return inner 16 17 18 19 def login(request): 20 if request.method == 'GET': 21 form=LoginForm() 22 return render(request,'login.html',{'form':form}) 23 else: 24 form = LoginForm(request.POST) 25 if form.is_valid(): 26 form.cleaned_data['password'] = md5(form.cleaned_data['password']) 27 user = models.UserInfo.objects.filter(**form.cleaned_data).first() 28 if user: 29 request.session[settings.USER_SEESION_KEY] = {'id':user.pk,'username':user.username} 30 return redirect('/index/') 31 else: 32 form.add_error('password','用户名或密码错误') 33 return render(request,'login.html',{'form':form}) 34 35 36 @auth 37 def index(request): 38 return HttpResponse('welcome') 39 40 41 @auth 42 def host(request): 43 return HttpResponse('主机管理') 44 45 46 def testt(request): 47 print('views.test') 48 return HttpResponse('...')

    基于中间件

     # md.py
    1
    from django.conf import settings 2 from django.shortcuts import redirect 3 4 5 class MiddlewareMixin(object): 6 def __init__(self, get_response=None): 7 self.get_response = get_response 8 super(MiddlewareMixin, self).__init__() 9 10 def __call__(self, request): 11 response = None 12 if hasattr(self, 'process_request'): 13 response = self.process_request(request) 14 if not response: 15 response = self.get_response(request) 16 if hasattr(self, 'process_response'): 17 response = self.process_response(request, response) 18 return response 19 20 21 class M1(MiddlewareMixin): 22 23 def process_request(self, request, *args, **kwargs): 24 25 if request.path_info == '/login/': 26 return None 27 28 user_info = request.session.get(settings.USER_SEESION_KEY) 29 if not user_info: 30 return redirect('/login/') 31 32 def process_response(self, request, response): 33 print('m1.process_response') 34 return response
    # views.py
    from
    django.shortcuts import render, redirect, HttpResponse from app01.forms import LoginForm from app01 import models from django.conf import settings from utils.md5 import md5 def login(request): if request.method == 'GET': form=LoginForm() return render(request,'login.html',{'form':form}) else: form = LoginForm(request.POST) if form.is_valid(): form.cleaned_data['password'] = md5(form.cleaned_data['password']) user = models.UserInfo.objects.filter(**form.cleaned_data).first() if user: request.session[settings.USER_SEESION_KEY] = {'id':user.pk,'username':user.username} return redirect('/index/') else: form.add_error('password','用户名或密码错误') return render(request,'login.html',{'form':form}) def index(request): return HttpResponse('welcome') def host(request): return HttpResponse('主机管理') def testt(request): print('views.test') return HttpResponse('...')

    中间件中其余的方法

    from django.conf import settings
    from django.shortcuts import redirect, HttpResponse
    
    
    class MiddlewareMixin(object):
        def __init__(self, get_response=None):
            self.get_response = get_response
            super(MiddlewareMixin, self).__init__()
    
        def __call__(self, request):
            response = None
            if hasattr(self, 'process_request'):
                response = self.process_request(request)
            if not response:
                response = self.get_response(request)
            if hasattr(self, 'process_response'):
                response = self.process_response(request, response)
            return response
    
    
    class M1(MiddlewareMixin):
    
        def process_request(self, request, *args, **kwargs):
    
            if request.path_info == '/login/':
                return None
    
            user_info = request.session.get(settings.USER_SEESION_KEY)
            if not user_info:
                return redirect('/login/')
    
        def process_view(self, request, callback, callback_args, callback_kwargs):
            pass
    
        def process_exception(self, request, exception):
            #捕捉所有异常,使其不会出现报错页面
            #异常写入日志
            return HttpResponse('服务器出问题了...')
    
        def process_response(self, request, response):
            print('m1.process_response')
            return response
    
        def process_template_response(self, request, response):
            #视图函数返回的对象,如果有render方法,则该方法就会被执行
            return
    from django.shortcuts import render, redirect, HttpResponse
    from app01.forms import LoginForm
    from app01 import models
    from django.conf import settings
    from utils.md5 import md5
    
    
    def auth(func):
        def inner(request,*args,**kwargs):
            user_info = request.session.get(settings.USER_SEESION_KEY)
            if not user_info:
                return redirect('/login/')
            res = func(*args,**kwargs)
            return res
        return inner
    
    
    
    def login(request):
        if request.method == 'GET':
            form=LoginForm()
            return render(request,'login.html',{'form':form})
        else:
            form = LoginForm(request.POST)
            if form.is_valid():
                form.cleaned_data['password'] = md5(form.cleaned_data['password'])
                user = models.UserInfo.objects.filter(**form.cleaned_data).first()
                if user:
                    request.session[settings.USER_SEESION_KEY] = {'id':user.pk,'username':user.username}
                    return redirect('/index/')
                else:
                    form.add_error('password','用户名或密码错误')
            return render(request,'login.html',{'form':form})
    
    
    class Foo(object):
    
        def __init__(self):
            pass
    
        def show(self):
            pass
    
        def render(self):
            self.show()
            return HttpResponse('有render方法')
    
    
    def index(request):
        return Foo()
    
    
    
    def host(request):
        return HttpResponse('主机管理')
    
    
    def testt(request):
        print('views.test')
        return HttpResponse('...')
    有render方法
  • 相关阅读:
    js实现输入银行卡号隔四位添加一个空格
    写出优雅的代码
    FOJ Problem 1016 无归之室
    FOJ Problem 1015 土地划分
    大数相加减
    NYOJ 42 一笔画
    NYOJ36 水池数目
    NYOJ 32 组合数
    贪吃蛇StringBuilder 和 定时器
    星 辰 · 第 三 条 约 定
  • 原文地址:https://www.cnblogs.com/Ryans-World/p/8594709.html
Copyright © 2020-2023  润新知