1. 程式人生 > >Django - 使用自定義中介軟體,實現登陸驗證

Django - 使用自定義中介軟體,實現登陸驗證

目錄

一、中介軟體 mymiddelware.py 檔案

二、檢視檔案

三、前端提交資料


 

一、中介軟體 mymiddelware.py 檔案

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


class MyMiddleware(MiddlewareMixin):
    def process_request(self, request):

        url = request.get_full_path()
        print(url)
        # print(request.path)
        is_login = request.session.get('is_login', None)
        if is_login or url.startswith('/appCsrf/csrf_login/'):
            print(is_login)
            return
        else:
            print('is_login is none')
            # 返回login頁面重新登陸,next表示從哪個頁面返回
            return redirect('/appCsrf/csrf_login/?next=%s' % url)
            # return redirect('/appCsrf/csrf_login/')

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

二、檢視檔案

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

def login(request):
    if request.method == 'GET':
        return render(request, 'csrf_login.html')
    else:
        # 從url內獲取next屬性值
        next = request.GET.get('next')
        name = request.POST.get('name')
        pwd = request.POST.get('pwd')
        if name == 'name' and pwd == '123':
            if next:
                # 若為他頁跳轉,返回跳轉前他頁(主頁面)
                obj = redirect(next)
            else:
                # 若非他頁跳轉,返回指定頁面(主頁面)
                obj = redirect('/index/')

            # obj.set_cookie('is_login', True)
            request.session['is_login'] = True
            return obj
        else:
            return HttpResponse('使用者名稱或密碼錯誤')


def shopping(request):
    return HttpResponse('確認登陸,可進行購物操作')

三、前端提交資料

<form action="" method="post">
    {% csrf_token %}
    <input type="text" name="name">
    <input type="text" name="pwd">
    <input type="submit" value="提交">
</form>