保存在客户端上与用户信息(状态)相关的数据
保存在服务端上与用户信息(状态)相关的数据
session的工作需要基于cookie,目前所有需要识别用户信息的网站都使用了cookie,客户端浏览器也可以通过设置,拒绝保存cookie
def set_cookie(request):
obj = HttpResponse('设置cookie')
obj.set_cookie('name', 'jason', max_age=1000)
return obj
views.py
from django.shortcuts import render, HttpResponse, redirect
# Create your views here.
def login_auth(func_name):
def inner(request, *args, **kwargs):
if request.COOKIES.get('name'):
res = func_name(request, *args, **kwargs)
return res
else:
target_path = request.path_info
return redirect(f'/login/?next={target_path}')
return inner
def login(request):
if request.method == "POST":
name = request.POST.get('name')
pwd = request.POST.get('pwd')
if name == 'xie' and pwd == '123':
target_path = request.GET.get('next')
if target_path:
obj = redirect(target_path)
else:
obj = redirect('/home/')
obj.set_cookie('name', 'xie')
return obj
return render(request, 'login.html')
@login_auth
def home(request):
return HttpResponse('home页面')
@login_auth
def index(request):
return HttpResponse('index页面')
urls.py
urlpatterns = [
path('login/', views.login),
path('home/', views.home),
path('index/', views.index),
]
1.django中间件相当于是django的门户,所有请求来和相应走都要经过中间件
2.django默认自带7个中间件,每个中间件都有自己特有的功能
3.django中间件除了默认的之外,还支持自定义中间件
全局相关的功能:全局身份校验,全局用户黑名单校验,全局用户访问频率校验
1.process_request:
2.request_response
1.process_view
当路由匹配成功之后 执行视图函数之前 自动触发
2.process_excption
当视图函数报错之后 自动触发
3.process_template_response
当视图函数返回的数据对象中含有render属性对应render函数才会触发