18-cookie 和 session

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 }} &nbsp;<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一致
posted @   测试圈的彭于晏  阅读(20)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示