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,点击登录

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

Python - Django - session 的基本使用的更多相关文章

  1. python Django session/cookie

    一, Cookie #cookie # def cook1(request): # print(request.COOKIES) # 查看cooke # # print(request.get_sig ...

  2. pythonのdjango Session体验

    Session Django中默认支持Session,其内部提供了5种类型的Session供开发者使用: 数据库(默认)缓存文件缓存+数据库加密cookie1.数据库Session Django默认支 ...

  3. python - django (session)

    # """ # Session # 是存在服务端的键值对 # Session 必须依赖Cookie 存储Session: · 在服务器生成随机字符串 · 生成一个和上面随 ...

  4. Python+Django+SAE系列教程16-----cookie&amp;session

    本章我们来解说cookie和session ,这两个东西相信大家一定不陌生,概念就不多讲了,我们直接来看其使用方法,首先是cookie,我们在view中加入三个视图,一个是显示cookie的,一个是设 ...

  5. python——django使用mysql数据库(一)

    之前已经写过如何创建一个django项目,现在我们已经有了一个小骷髅,要想这个web工程变成一个有血有肉的人,我们还需要做很多操作.现在就先来介绍如何在django中使用mysql数据库. 前提:已经 ...

  6. Redis+Django(Session,Cookie)的用户系统

    一.Django authentication django authentication提供了一个便利的user api接口,无论在py中 request.user,参见Request and re ...

  7. Python+Django+SAE系列教程17-----authauth (认证与授权)系统1

    通过session,我们能够在多次浏览器请求中保持数据,接下来的部分就是用session来处理用户登录了. 当然,不能仅凭用户的一面之词,我们就相信,所以我们须要认证. 当然了,Django 也提供了 ...

  8. python Django知识点总结

    python Django知识点总结 一.Django创建项目: CMD 终端:Django_admin startproject sitename(文件名) 其他常用命令: 其他常用命令: 通过类创 ...

  9. python Django注册页面显示头像

    python Django注册页面显示头像(views) def register(request): ''' 注册 :param request: :return: ''' if request.m ...

随机推荐

  1. debug错误总结

    1, 2,就是一个大括号的问题..让你总是得不了满分..明明和别人的代码差不多. 3,就比如P1914,这种藏坑的题,或者说这一类藏坑的题. 坑是什么呢?就是位数不够往后推的时候.. 你不填坑你就得不 ...

  2. 180908 python 字符串内建函数

    Python 的字符串内建函数 Python 的字符串常用内建函数如下: 序号 方法及描述 1 capitalize()将字符串的第一个字符转换为大写 2 center(width, fillchar ...

  3. 模拟赛 提米树 题解 (DP+思维)

    题意: 有一棵棵提米树,满足这样的性质: 每个点上长了一定数量的Temmie 薄片,薄片数量记为这个点的权值,这些点被标记为 1 到 n 的整数,其 中 1 号点是树的根,没有孩子的点是树上的叶子. ...

  4. DBUtils框架ResultSetHandler接口学习

    今儿在学习spring框架的时候,让我想起来之前做项目时一直搁置的一个问题,就是DBUtils框架的做数据库操作的使用,当时制作项目的时候就是通过实例打了一遍,由于时间原因也并没有仔细去了解这一方面. ...

  5. postgresql Kill掉正在执行的SQL语句

    kill方式是杀掉进程,但是有时候需要取消相关SQL语句,采用以下方式 一.查看哪些SQL语句正在执行 语句如下:SELECT datname,procpid,query_start, current ...

  6. Linux 下查看内存使用情况方法总结

    Linux查看CPU和内存使用情况:http://www.cnblogs.com/xd502djj/archive/2011/03/01/1968041.html 在做Linux系统优化的时候,物理内 ...

  7. BZOJ 3625:小朋友和二叉树 多项式开根+多项式求逆+生成函数

    生成函数这个东西太好用了~ code: #include <bits/stdc++.h> #define ll long long #define setIO(s) freopen(s&q ...

  8. P1903 [国家集训队]数颜色 (带修改莫队)

    题目描述 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会向你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔. 2 ...

  9. Processing 中自定义旋转的实现

    一.首先是关键概念在 Processing 中希望处理圆周上的点需要 旋转公式:x = 旋转中心 + 旋转半径 x cos(旋转角度);y = 旋转中心 + 旋转半径 x sin(旋转角度): 用这一 ...

  10. git图形化统计工具 - windows下gitstats的安装和使用

    gitstats 是一款git历史统计工具,可以生成定量的统计数据,并以html图表的形式展示.统计文件包括文件数量.代码量.提交量.作者信息.每天活跃度.每周活跃度.每月活跃度以及提交数排名等等,信 ...