1. cookie操作
# 增加 : response.set_cookie("username", user.username, expires=future)
# 获取 : username = request.COOKIES.get("username")
# 删除 : res.delete_cookie("username")
1.1 登录-首页-退出登录
def login(request):
if request.method == "POST":
userinfo = request.POST.dict()
userinfo.pop("csrfmiddlewaretoken")
print(userinfo)
# user = User.objects.filter(**userinfo).first()
user = User.objects.filter(username=userinfo.get("username"), password=userinfo.get("password")).first()
if user:
response = redirect('/user/') # 重定向到首页
# 三天以后过期
future = datetime.now() + timedelta(days=3)
# 将cookie值写回客户端
response.set_cookie("username", user.username, expires=future)
return response
return render(request, 'app03/login.html')
def home(request):
# 获取cookie中指定键值对
username = request.COOKIES.get("username")
return render(request, "app03/index.html", locals())
def logout(request):
res = redirect('/user/')
res.delete_cookie("username")
return res
# urls.py
app_name='App03'
urlpatterns = [
path('login/',views.login,name="login"),
path('',views.home,name="home"),
path('logout/',views.logout,name="logout"),
]
# 登录页面
<body>
<form action="{% url 'App03:login' %}" method="post">
{% csrf_token %}
用户名:<input type="text" name="username"> <br>
密码:<input type="password" name="password"> <br>
<input type="submit">
</form>
</body>
# 首页
<body>
<h1>首页</h1>
{% if username %}
{{ username }} <a href="/user/logout/">退出登录</a>
{% else %}
你还未登录
{% endif %}
</body>
1.2 路由保护
# 验证是不是登录状态,没登录跳登录页
# 自定义装饰器:路由保护
def check_login(func):
def inner(*args, **kwargs):
if args[0].COOKIES.get("username"):
return func(*args, **kwargs)
else:
return redirect("/user/login")
return inner
@check_login
def list_article(request):
return HttpResponse("文章列表")
# 路由保护
path("list/",views.list_article,name="list"),
2. session操作
# 增加 : request.session["username"] = user.username
# 获取 : username = request.session.get("username")
# 删除 :
request.session.clear() # 清除所有session键值对,不清空sessionid
request.session.flush() # 清除所有session键值对,并清空sessionid,并清空数据库对应的记录
del request.session["username"] # 清除指定session键值对
# 和上述操作cookie一致