django的cookie和session
- Cookie 是存储在客户端计算机上的文本文件,并保留了各种跟踪信息。
- session是存储在服务器端的,由每个用户独享,用户可以把各自的数据放在各自的 session 中,当用户再去访问该服务器中的其它 web 资源时,服务器端再从用户各自的 session 中取出数据为用户服务。
1.cookie
(0)注册app
修改settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'cookietest',
#'sessiontest',
]
(1)模板
mlogin.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h2>这里是cookie login页面</h2>
<h3>用户登录</h3>
<!-- <form action="/cookietest/login/" method="post"> -->
<form action="/cookietest/login/" method="post">
{% csrf_token %}
<p>用户名: <input type="text" name="username"></p>
<p>密码: <input type="password" name="pwd"></p>
<button type="submit">登录</button>
</form>
</body>
</html>
mindex.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h2>这里是cookie index页面</h2>
<a href="/cookietest/logout/">注销</a>
</body>
</html>
mdetail.html,没有cookie不能访问这个页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h2>这里是cookie detail页面</h2>
<a href="/cookietest/logout/">注销</a>
</body>
</html>
(2)模型
models.py
from django.db import models
# Create your models here.
class UserInfo(models.Model):
username = models.CharField(max_length=32)
password = models.CharField(max_length=32)
在admin.py中注册模型
from django.contrib import admin
from .models import *
# Register your models here.
admin.site.register(UserInfo)
(3)视图
views.py
from django.shortcuts import render, redirect
from . import models
# Create your views here.
def login(request):
if request.method == "GET":
return render(request, "mlogin.html")
username = request.POST.get("username")
password = request.POST.get("pwd")
user_obj = models.UserInfo.objects.filter(username=username, password=password).first()
print(user_obj.username)
if not user_obj:
return redirect("/cookietest/login/")
else:
rep = redirect("/cookietest/index/")
rep.set_cookie("is_login", True)
return rep
def index(request):
print(request.COOKIES.get('is_login'))
status = request.COOKIES.get('is_login') # 收到浏览器的再次请求,判断浏览器携带的cookie是不是登录成功的时候响应的 cookie
if not status:
return redirect('/cookietest/login/')
return render(request, "mindex.html")
def logout(request):
rep = redirect('/cookietest/login/')
rep.delete_cookie("is_login")
return rep # 点击注销后执行,删除cookie,不再保存用户状态,并弹到登录页面
def detail(request):
print(request.COOKIES.get('is_login'))
status = request.COOKIES.get('is_login')
if not status:
return redirect('/cookietest/login/')
return render(request, "mdetail.html")
(4)路由
from django.urls import path
from .views import *
urlpatterns = [
path('login/', login),
path('index/', index),
path('logout/', logout),
path('detail/', detail)
]
(5)效果
2.session
(0)注册app
修改settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'cookietest',
'sessiontest',
]
(1)模板
s_mlogin.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h2>这里是session login页面</h2>
<h3>用户登录</h3>
<!-- <form action="/cookietest/login/" method="post"> -->
<form action="/sessiontest/session_login/" method="post">
{% csrf_token %}
<p>用户名: <input type="text" name="username"></p>
<p>密码: <input type="password" name="pwd"></p>
<button type="submit">登录</button>
</form>
</body>
</html>
s_mindex.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h2>这里是session_index页面,当前用户:{{ request.session.user1 }}</h2>
<a href="/sessiontest/s_logout/">注销</a>
</body>
</html>
(2)模型
models.py
from django.db import models
# Create your models here.
class UserInfo(models.Model):
username = models.CharField(max_length=32)
password = models.CharField(max_length=32)
在admin.py中注册模型
from django.contrib import admin
from .models import *
# Register your models here.
admin.site.register(UserInfo)
(3)视图
views.py
from django.shortcuts import render, redirect
from .models import *
# Create your views here.
def login(request):
if request.method == "GET":
return render(request, "s_mlogin.html")
username = request.POST.get("username")
password = request.POST.get("pwd")
user_obj = UserInfo.objects.filter(username=username, password=password).first()
print(user_obj.username)
if not user_obj:
return redirect("/sessiontest/session_login/")
else:
request.session['is_login'] = True
request.session['user1'] = username
return redirect("/sessiontest/s_index/")
def s_index(request):
status = request.session.get('is_login')
if not status:
return redirect('/sessiontest/session_login/')
return render(request, "s_mindex.html")
def s_logout(request):
# del request.session["is_login"] # 删除session_data里的一组键值对
request.session.flush() # 删除一条记录包括(session_key session_data expire_date)三个字段
return redirect('/sessiontest/session_login/')
(4)路由
from django.urls import path
from .views import *
urlpatterns = [
path('session_login/', login),
path('s_index/', s_index),
path('s_logout/', s_logout),
]
(5)效果