概念:
在模板中想要使用的变量是从视图函数中的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的变量.
效果演示:
用户的登录就实现了