django系列8.3.2--django中间件实现登录验证(2) 个人构想逻辑

middleware.py

from django.utils.deprecation import MiddlewareMixin
from django.shortcuts import render,redirect,reverse
from django.shortcuts import HttpResponse


class SessionAuth(MiddlewareMixin):

    def process_request(self,request):
        print("session认证开始")

        white_list = [reverse('login'),]
        path = request.path
        print(path)
        if path in white_list:
            print("直接通过")
            return None
        else:
            status = request.session.get("session_login")
            if status:
                return None
            else:
                return redirect('login')

    def process_response(self, request, response):
        return response

其中process_request函数可以优化为

def process_request(self,request):
     print("session认证开始")

     white_list = [reverse('login'),]  # 设置白名单
     path = request.path
     print(path)
     if path not in white_list:
     status = request.session.get('session_login')
     if not status:
         return redirect('login')

urls.py

from django.conf.urls import url
from django.contrib import admin
from app01 import views


urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^index/', views.index, name="index"),
    url(r'^login/', views.login, name="login"),
    url(r'^logout/', views.logout, name="logout"),
    # url(r'^loginview/', views.LoginView.as_view(), name="loginview"),
]

views.py

def login(request):

    if request.method == 'GET':
        print("app中的视图函数")
        return render(request,"login.html")

    else:
        username = request.POST.get("username")
        password = request.POST.get("password")

        ret_obj_list = models.UserInfo.objects.filter(username=username,password=password)
        if ret_obj_list.exists():
            request.session['session_login'] = True
            request.session['username'] = username

            # data = {"session_login":True,"user":username}
            return redirect("index")
        else:
            return render(request,"login.html")

def index(request):
    return render(request, "index.html")

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

猜你喜欢

转载自www.cnblogs.com/robertx/p/10498160.html