概念:
在模板中想要使用的變量是從視圖函數中的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的變量.
效果演示:
用戶的登錄就實現了