Python - Django - session 的基本使用
urls.py:
from django.conf.urls import url
from app02 import views urlpatterns = [
# app02
url(r'^app02/login/', views.login),
url(r'^app02/home/', views.home),
url(r'^app02/index/', views.index),
url(r'^app02/logout/', views.logout),
]
views.py:
from django.shortcuts import render, redirect from functools import wraps def check_login(func):
@wraps(func)
def inner(request, *args, **kwargs):
ret = request.session.get("login") if ret == "success":
# 如果已经登录过
return func(request, *args, **kwargs)
else:
# 没有登录过的 跳转到登录页面
# 获取当前访问的URL
next_url = request.path_info
print(next_url)
return redirect("/app02/login/?next={}".format(next_url))
return inner def login(request):
if request.method == "POST":
username = request.POST.get("user")
password = request.POST.get("pwd")
# 从URL里面取到 next 参数
next_url = request.GET.get("next") if username == "admin" and password == "admin":
# 登录成功
if next_url:
rep = redirect(next_url) # 得到一个响应对象
else:
rep = redirect("/app02/home/") # 得到一个响应对象 # 设置 session
request.session["login"] = "success"
request.session["username"] = username
request.session.set_expiry(60) # 60 秒之后失效
return rep
ret = request.session.get("login")
if ret == "success":
return redirect("/app02/home/")
else:
return render(request, "app02/login.html") @check_login
def home(request):
username = request.session.get("username")
return render(request, "app02/home.html", {"username": username}) @check_login
def index(request):
username = request.session.get("username")
return render(request, "app02/index.html", {"username": username}) # 注销函数
def logout(request):
request.session.flush() # 删除 session 数据和 cookie
request.session.delete() # 只删除 session 数据,不删除 cookie
return render(request, "/app02/login/")
login.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登录页面</title>
</head>
<body> <p>登录页面</p> <form action="{{ request.get_full_path }}" method="post">
{% csrf_token %}
<p>
账号:
<input type="text" name="user">
</p>
<p>
密码:
<input type="text" name="pwd">
</p>
<p>
<input type="submit" value="登录">
</p>
</form> </body>
</html>
home.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>个人信息页面</title>
</head>
<body> <p>{{ username }} 的个人信息页面</p> <a href="/logout/">注销</a> </body>
</html>
index.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>主页面</title>
</head>
<body> <p>{{ username }} 的主页面</p> <a href="/logout/">注销</a> </body>
</html>
访问,http://127.0.0.1:8888/app02/login/

输入 admin、admin,点击登录

manage.py@mysite3 > makemigrations
manage.py@mysite3 > migrate
再看一下数据库

点进去看一下字段
expire_date 是 session 的过期时间
生成 table 之后,再来到 login 页面登录

登录成功
session 的基本操作:
request.session['login'] = 'false' # 设置 session 中的数据
request.session.get('login') # 通过 key 来获取 session 中的数据
request.session.exists("login") # 判断 session 的 login 在数据库中是否存在
request.session.setdefault('login', 'false') # 为 session 的 key 设置默认值 false
del request.session['login'] # 删除 session 的 key 中的数据
request.session.delete() # 删除当前会话的所有 session 数据
request.session.flush() # 删除当前的 session 数据并删除 cookie
request.session.clear_expired() # 将所有过期的 session 数据删除
request.session.session_key # 会话 session 的 key # 获取 session(字典) 中的所有 键、值、键值对
request.session.keys() # 提取所有键
request.session.values() # 提取所有值
request.session.items() # 提取所有键值对
request.session.iterkeys() # 迭代键
request.session.itervalues() # 迭代值
request.session.iteritems() # 迭代键值对 # 设置会话 session 和 cookie 的超时时间
request.session.set_expiry(value)
# 如果 value 是个整数 n,session 会在 n 秒后失效
# 如果 value 是个 datatime 或 timedelta,session 就会在这个时间后失效
# 如果 value 是 0,用户关闭浏览器 session 就会失效
# 如果 value 是 None,session 会依赖全局 session 失效策略
settings.py 中的 session 配置:
# 设置数据库 session
SESSION_ENGINE = 'django.contrib.sessions.backends.db' # 引擎(默认) # 设置缓存 session
SESSION_ENGINE = 'django.contrib.sessions.backends.cache' # 引擎
SESSION_CACHE_ALIAS = 'default' # 使用的缓存别名(默认内存缓存,也可以是 memcache),此处别名依赖缓存的设置 # 设置文件 session
SESSION_ENGINE = 'django.contrib.sessions.backends.file' # 引擎
SESSION_FILE_PATH = None # 缓存文件路径,如果为 None,则使用 tempfile 模块获取一个临时地址 tempfile.gettempdir() # 设置缓存、数据库 session
SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db' # 引擎 # 加密 cookie session
SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies' # 引擎
其他的设置:
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,默认修改之后才保存(默认)
Python - Django - session 的基本使用的更多相关文章
- python Django session/cookie
一, Cookie #cookie # def cook1(request): # print(request.COOKIES) # 查看cooke # # print(request.get_sig ...
- pythonのdjango Session体验
Session Django中默认支持Session,其内部提供了5种类型的Session供开发者使用: 数据库(默认)缓存文件缓存+数据库加密cookie1.数据库Session Django默认支 ...
- python - django (session)
# """ # Session # 是存在服务端的键值对 # Session 必须依赖Cookie 存储Session: · 在服务器生成随机字符串 · 生成一个和上面随 ...
- Python+Django+SAE系列教程16-----cookie&session
本章我们来解说cookie和session ,这两个东西相信大家一定不陌生,概念就不多讲了,我们直接来看其使用方法,首先是cookie,我们在view中加入三个视图,一个是显示cookie的,一个是设 ...
- python——django使用mysql数据库(一)
之前已经写过如何创建一个django项目,现在我们已经有了一个小骷髅,要想这个web工程变成一个有血有肉的人,我们还需要做很多操作.现在就先来介绍如何在django中使用mysql数据库. 前提:已经 ...
- Redis+Django(Session,Cookie)的用户系统
一.Django authentication django authentication提供了一个便利的user api接口,无论在py中 request.user,参见Request and re ...
- Python+Django+SAE系列教程17-----authauth (认证与授权)系统1
通过session,我们能够在多次浏览器请求中保持数据,接下来的部分就是用session来处理用户登录了. 当然,不能仅凭用户的一面之词,我们就相信,所以我们须要认证. 当然了,Django 也提供了 ...
- python Django知识点总结
python Django知识点总结 一.Django创建项目: CMD 终端:Django_admin startproject sitename(文件名) 其他常用命令: 其他常用命令: 通过类创 ...
- python Django注册页面显示头像
python Django注册页面显示头像(views) def register(request): ''' 注册 :param request: :return: ''' if request.m ...
随机推荐
- stm32的hal之串口库函数总结复习
1.串口的使用方法 在hal库中,有三个串口发送的函数 a.HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, uin ...
- 再论strlen sizeof
今天,在使用字符串的时候,对sizeof和strlen的用法更加深入了,特此记录下. strlen是运行是计算的,不能放在函数外面计算的sizeof是预编译时运行的,可以放在函数外面计算. 对于cha ...
- JavaScript倒计时并刷新页面
//10秒倒计时效果自动补全09,08等<div id="we">10</div>s <script> window.onload = func ...
- Coins in a Line
Description There are n coins in a line. Two players take turns to take one or two coins from right ...
- debug错误总结
1, 2,就是一个大括号的问题..让你总是得不了满分..明明和别人的代码差不多. 3,就比如P1914,这种藏坑的题,或者说这一类藏坑的题. 坑是什么呢?就是位数不够往后推的时候.. 你不填坑你就得不 ...
- leetcode解题报告(29):Student Attendance Record I
描述 You are given a string representing an attendance record for a student. The record only contains ...
- 洛谷 P5436 【XR-2】缘分 题解
P5436 [XR-2]缘分 题目背景 世间万物都置身于缘分编织的大网中.缘分未到,虽历经千劫,却不能相遇.缘分到了,在草原上都能等到一艘船.--<一禅小和尚> 题目描述 一禅希望知道他和 ...
- 【一起来烧脑】读懂HTTP知识体系
背景 读懂HTTP很重要,参加过面试的小伙伴都很清楚,无论是技术面试面试题出得怎样,都有机会让你讲解一下HTTP,大部分都会问一下. 面试官:考考你网络协议的知识,TCP协议和UDP协议的区别,HTT ...
- Python 全栈开发【第0篇】:目录
Python 全栈开发[第0篇]:目录 第一阶段:Python 开发入门 Python 全栈开发[第一篇]:计算机原理&Linux系统入门 Python 全栈开发[第二篇]:Python基 ...
- MAC OS 中mount nfs 报错问题.
记一下 MAC OS 中mount nfs 报错问题. 环境和配置文件 NFS 服务端 Ubuntu 安装 apt install nfs-kernel-server 服务端的配置文件 cat /et ...