django之上下文處理器

概念:

在模板中想要使用的變量是從視圖函數中的context這個上下文的參數中傳遞進來的,每個視圖函數需要什麼參數就傳什麼參數.

上下文處理器就是創建模板變量.

在settings.py中,包含了當前使用的上下文處理器。他的作用是可以給每一個模板都提供相同的變量
在這裏插入圖片描述

2-自定義上下文處理器例子

比如說訪問每個頁面的話 都需要用到變量用戶名, 那麼我們也可以把這個變量在上下文處理器中將變量傳給模板

1.在主目錄下創建了一個.py的文件.
2.在.py的文件中創建一個MyGlobal的函數
3.必須傳入request這個參數
4.必須返回一個字典類型的對象.

def MyGlobal(request):
    username = request.session.get("username", "未登錄")#定義全局變量
    return {'username':username} #返回字典形式

def f(request):
    """
    按照要求實現功能
    :param request:
    :return:
    """
    return {"name":"嘿嘿嘿"}

views.py

from django.http import HttpResponse
# Create your views here.

def index(request):
    """
    查找 如果查到了就直接顯示登錄狀態  沒有就提示登錄
    :param request:
    :return:
    """
    return render(request, 'dom/index.html')


class LoginResponse(View):
    def get(self, request):
        return render(request,"dom/login.html")

    def post(self, request):
        """
        1-獲取參數
        2-校驗參數
        3-業務邏輯
        4-返回響應
        :param request:
        :return:
        """
        #1-獲取用戶名
        username = request.POST.get("username")
        #2-設置session
        request.session["username"] = username
        #3-設置時間  判斷用戶是否有勾選記住我 如果勾選  設置15天登錄
        #沒有勾選  當會話結束時結束登錄狀態
        request.session.set_expiry(0)
        return redirect(reverse('dom:index'))

def exit(request):
    request.session.flush()
    return redirect(reverse("dom:index"))

urls.py中

from django.urls import path
from . import views
app_name="dom"
urlpatterns = [
    path('index/',views.index,name="index"),
    path('exit/',views.exit,name="exit"),
    path('login/',views.LoginResponse.as_view(),name="login"),
    path('log/',views.LoginView.as_view(),name="log"),

]

3-註冊上下文處理器

在這裏插入圖片描述

4-中間件和上下文的總結

中間件是在用戶請求到響應的過程中去加入一些額外的邏輯功能,
例子中給request增加了一個username的屬性.

上下文是給所有的模板增加變量
例子中給模板增加了一個username的變量.

效果演示:
在這裏插入圖片描述
在這裏插入圖片描述
用戶的登錄就實現了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章