Django Cookie Seesion
Cookie:
HTML代码:
<form action="{% url "login" %}" method="post"> <input type="text" name="username"> <input type="text" name="password"> <input type="submit" value="submit">{{ msg }} {% csrf_token %} </form>
URL路由:
urlpatterns = [ url(r'^admin/', admin.site.urls), url(r"^login/", Login.as_view(), name="login"), url(r"^home/", Home.as_view(), name="home"), ]
Views逻辑:
class Login(View): def get(self, request): return render(request, "login.html") def post(self, request): username = request.POST.get("username") password = request.POST.get("password") ct = UserInfo.objects.filter(username=username, password=password).count() if ct: obj = redirect(reverse("home")) obj.set_cookie("cookieid", username) return obj else: return render(request, "login.html", {"msg": "username or password error!"}) class Home(View): def get(self, request): cookie = request.COOKIES.get("cookieid")if cookie: return render(request, "home.html") return render(request, "login.html")
Seesion:
class Login(View): def get(self, request): return render(request, "login.html") def post(self, request): username = request.POST.get("username") password = request.POST.get("password") user_obj = UserInfo.objects.filter(username=username, password=password) if user_obj.exists(): obj = redirect(reverse("home")) request.session["username"] = user_obj.id return obj else: return render(request, "login.html", {"msg": "username or password error!"}) class Home(View): def get(self, request): v = request.session.get("username") if v: return render(request, "home.html") return redirect(reverse("login"))
Logout()
def logout(request): request.session.clear() return redirect('/login/')
Django中默认支持Session,其内部提供了5种类型的Session供开发者使用:
- 数据库(默认) *常用
- 缓存 *常用
- 文件
- 缓存+数据库
- 加密cookie
1、数据库Session(默认)
Django默认支持Session,并且默认是将Session数据存储在数据库中,即:django_session 表中。
a. 配置 settings.py
SESSION_ENGINE = 'django.contrib.sessions.backends.db' # 引擎(默认)
SESSION_COOKIE_NAME = "sessionid" # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串(默认)
SESSION_COOKIE_PATH = "/" # Session的cookie保存的路径(默认)
SESSION_COOKIE_DOMAIN = None # Session的cookie保存的域名(默认)
SESSION_COOKIE_SECURE = False # 是否Https传输cookie(默认)
SESSION_COOKIE_HTTPONLY = True # 是否Session的cookie只支持http传输(默认)
SESSION_COOKIE_AGE = 1209600 # Session的cookie失效日期(2周)(默认)
SESSION_EXPIRE_AT_BROWSER_CLOSE = False # 是否关闭浏览器使得Session过期(默认)
SESSION_SAVE_EVERY_REQUEST = False **(通常需要设置为True) # 是否每次请求都保存Session,默认修改之后才保存(默认)
b. 使用
def index(request):
# 获取、设置、删除Session中数据
request.session['k1']
request.session.get('k1',None)
request.session['k1'] = 123
request.session.setdefault('k1',123) # 存在则不设置
del request.session['k1']
# 所有 键、值、键值对
request.session.keys()
request.session.values()
request.session.items()
request.session.iterkeys()
request.session.itervalues()
request.session.iteritems()
# 用户session的随机字符串
request.session.session_key
# 将所有Session失效日期小于当前日期的数据删除
request.session.clear_expired()
# 检查 用户session的随机字符串 在数据库中是否
request.session.exists("session_key")
# 删除当前用户的所有Session数据
request.session.delete("session_key")
request.session.set_expiry(value)
* 如果value是个整数,session会在些秒数后失效。
* 如果value是个datatime或timedelta,session就会在这个时间后失效。
* 如果value是0,用户关闭浏览器session就会失效。
* 如果value是None,session会依赖全局session失效策略。
2、缓存Session
a. 配置 settings.py
SESSION_ENGINE = 'django.contrib.sessions.backends.cache' # 引擎
SESSION_CACHE_ALIAS = 'default' # 使用的缓存别名(默认内存缓存,也可以是memcache),此处别名依赖缓存的设置
SESSION_COOKIE_NAME = "sessionid" # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串
SESSION_COOKIE_PATH = "/" # Session的cookie保存的路径
SESSION_COOKIE_DOMAIN = None # Session的cookie保存的域名
SESSION_COOKIE_SECURE = False # 是否Https传输cookie
SESSION_COOKIE_HTTPONLY = True # 是否Session的cookie只支持http传输
SESSION_COOKIE_AGE = 1209600 # Session的cookie失效日期(2周)
SESSION_EXPIRE_AT_BROWSER_CLOSE = False # 是否关闭浏览器使得Session过期
SESSION_SAVE_EVERY_REQUEST = False # 是否每次请求都保存Session,默认修改之后才保存
仅支持memcached作为缓存
# CACHES = {
# 'default': {
# 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
# 'LOCATION': '127.0.0.1:11211',
# }
# }
b. 使用 同上