python中session()是干什么作用的_Python - Django - session 的基本使用

本文介绍了Django中session的使用,包括urls.py和views.py的配置,以及login、home、index和logout视图函数。详细讲解了如何检查登录状态、设置和操作session数据,如设置session过期时间。还涵盖了session的数据库存储、缓存存储、文件存储以及cookie设置,并讨论了settings.py中的session配置选项。
摘要由CSDN通过智能技术生成

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:

登录页面

登录页面

{% csrf_token %}

账号:

密码:

home.html:

个人信息页面

{{ username }} 的个人信息页面

注销

index.html:

主页面

{{ username }} 的主页面

注销

访问,http://127.0.0.1:8888/app02/login/

输入 admin、admin,点击登录

显示 mysite3.django_session 这个表不存在

执行命令:

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,默认修改之后才保存(默认)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值