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 ...
随机推荐
- Homebrew 更新慢问题
cd "$(brew --repo)" git remote set-url origin https://mirrors.tuna.tsinghua.edu.cn/git/hom ...
- jmeter 压测工具安装及使用
linux下jmeter安装: 1. 下载JMeter官方网站下载最新版本: http://jmeter.apache.org/download_jmeter.cgi ,目前最新版是Apache JM ...
- myaliyun ECS 启动内外穿透工具shell脚本
#!/bin/bash tbp=/usr/local/ngrok cmd=$1 if [[ -z $cmd ]];then echo "err!usage{sh $0 1|0 to star ...
- php md5算法
<!DOCTYPE html> <html> <body> <?php $str = "Shanghai"; echo md5($str) ...
- select和C标签
<select name="cpcyModel.rwzj" id="cpcyModel_rwzj"> <option value=" ...
- SyntaxError: Non-ASCII character 'æ' in file csdn.py on line 7, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
错误信息: SyntaxError: Non-ASCII character , but no encoding declared; see http://python.org/dev/peps/pe ...
- T-MAX组--项目冲刺(第二天)
THE SECOND DAY 项目相关 作业相关 具体描述 所属班级 2019秋福大软件工程实践Z班 作业要求 团队作业第五次-项目冲刺 作业正文 T-MAX组--项目冲刺(第二天) 团队名称 T-M ...
- 在Kaggle免费使用GPU训练自己的神经网络
Kaggle上有免费供大家使用的GPU计算资源,本文教你如何使用它来训练自己的神经网络. Kaggle是什么 Kaggle是一个数据建模和数据分析竞赛平台.企业和研究者可在其上发布数据,统计学者和数据 ...
- [Linux] 60s快速分析Linux性能
转载: https://www.cnblogs.com/zichuan/p/10440617.html 之前在地铁上看到过一篇快速分析Linux系统性能的文章,觉得以后有用,今天就找了一下,转载过来. ...
- cmake 手册详解【转】
https://www.cnblogs.com/coderfenghc/tag/cmake/ CMake 手册详解(二十三) SirDigit 2012-12-16 22:03 阅读:11058 ...