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的变量.

效果演示:
在这里插入图片描述
在这里插入图片描述
用户的登录就实现了

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