Django框架自定义session处理操作示例


Posted in Python onMay 27, 2019

本文实例讲述了Django框架自定义session处理操作。分享给大家供大家参考,具体如下:

django有自己的一套session框架,有他自己的机制处理,但这通常是在全新构件系统的时候才会用到。如果是一套已有的系统,现在重新想用django做成web版的,由于以往的数据库是已经设计好,不能修改其表结构,但可以增加表,因为用django必须有django自己的一些系统表,这些是必须添加到原有的数据库中的,我们可以通过 mange.py syncdb 来创建.

| auth_group
| auth_group_permissions
| auth_permission
| auth_user
| auth_user_groups
| auth_user_user_permissions
| blog_content
| django_content_type
| django_session
| django_site

当然,这些表各自有自己的作用,比如django_session 就是用来管理session 的。

如果你用djiango自身的session来管理用户是否登录,可以用系统自带的装饰方法:@login_required

但如果是你自己在原来的系统上开发,原来的用户管理肯定不可能是django一样的。所以得自己写一个类似@login_required方法来判断用户是否已经登录.

假设有一个user model 是用户的Class ,并在 models中已经定义

class UserID(models.Model):
  login_id=models.CharField(max_length=32)
  login_pwd=models.CharField(max_length=32,blank=False)
  nickname=models.CharField(max_length=50)

登录的方法

def checklogin(request):
  """ 用户登录简易判断 """
  try:
    login_id=request.POST.get('user','')
    userpwd=request.POST.get('password','')
    existuser=models.UserID.objects.get(login_id=login_id,login_pwd=userpwd)
    #假设存在此用户,就要给session 赋值
    request.session['myuser']=existuser
  except:
    .....

到此为止,自己定义的登录过程已经完成,并且记录了session值。如果在其他方法需要检查用户是否登录时,如何写自己的判断方法呢?

def check_session(func):
  ''' check user session '''
  def wrapper(request,*args, **kv):
    userinfo=request.session.get('myuser',None)
    if not userinfo:
      return HttpResponseRedirect('/login') #没有登录,则跳转到登录页面
    return func(request,*args, **kv)
  return wrapper

在其他需要检查用户是否登录的views方法上,加上这个装饰就可以了。

@check_session
def get_all_infomation(request):
  context={}
  context.update(csrf(request))
  ......
  return render_to_response('customer/all_information.html',context)

这样,如果用户没有登录的话,就会跳转到登录页面,用装饰实现了自己的用户 session判断。

当然有人会问,我要注销登录怎么处理呢?简单,django的session其实就是dict.所以可以用如下方法注销

def logout(request):
  try:
    del request.session['myuser']
  except KeyError:
    pass
  return HttpResponseRedirect('/')

希望本文所述对大家基于Django框架的Python程序设计有所帮助。

Python 相关文章推荐
python 提取文件的小程序
Jul 29 Python
Python对两个有序列表进行合并和排序的例子
Jun 13 Python
详解Python中expandtabs()方法的使用
May 18 Python
python实现的守护进程(Daemon)用法实例
Jun 02 Python
python微信跳一跳系列之棋子定位像素遍历
Feb 26 Python
python文本数据相似度的度量
Mar 12 Python
对Python 两大环境管理神器 pyenv 和 virtualenv详解
Dec 31 Python
详解Python3 基本数据类型
Apr 19 Python
python django下载大的csv文件实现方法分析
Jul 19 Python
Python Web框架之Django框架Model基础详解
Aug 16 Python
matlab、python中矩阵的互相导入导出方式
Jun 01 Python
Keras 切换后端方式(Theano和TensorFlow)
Jun 19 Python
numpy concatenate数组拼接方法示例介绍
May 27 #Python
详解Numpy中的数组拼接、合并操作(concatenate, append, stack, hstack, vstack, r_, c_等)
May 27 #Python
python安装numpy和pandas的方法步骤
May 27 #Python
numpy库与pandas库axis=0,axis= 1轴的用法详解
May 27 #Python
Python之NumPy(axis=0 与axis=1)区分详解
May 27 #Python
Python3.7 新特性之dataclass装饰器
May 27 #Python
Python3多目标赋值及共享引用注意事项
May 27 #Python
You might like
PHP foreach循环使用详解与实例代码
2010/05/08 PHP
php中防止伪造跨站请求的小招式
2011/09/02 PHP
解析PHP中的内存管理,PHP动态分配和释放内存
2013/06/28 PHP
wordpress自定义标签云与随机获取标签的方法详解
2019/03/22 PHP
javascript String 对象
2008/04/25 Javascript
Javascript 原型和继承(Prototypes and Inheritance)
2009/04/01 Javascript
实现png图片和png背景透明(支持多浏览器)的方法
2009/09/08 Javascript
浏览器的JavaScript引擎的识别方法
2013/10/20 Javascript
js写的评论分页(还不错)
2013/12/23 Javascript
node.js中的fs.lstat方法使用说明
2014/12/16 Javascript
javascript获取网页各种高宽及位置的方法总结
2016/07/27 Javascript
JS实现图片局部放大或缩小的方法
2016/08/20 Javascript
解析javascript图片懒加载与预加载的分析总结
2016/10/27 Javascript
AngularJS执行流程详解
2017/02/17 Javascript
微信{"errcode":48001,"errmsg":"api unauthorized, hints: [ req_id: 1QoCla0699ns81 ]"}
2018/10/12 Javascript
CountUp.js数字滚动插件使用方法详解
2019/10/17 Javascript
javascript利用键盘控制小方块的移动
2020/04/20 Javascript
原生JS实现无缝轮播图片
2020/06/24 Javascript
Javascript 模拟mvc实现点餐程序案例详解
2020/12/24 Javascript
[02:21]2018完美盛典章节片——初心
2018/12/17 DOTA
Python读写Redis数据库操作示例
2014/03/18 Python
python安装mysql-python简明笔记(ubuntu环境)
2016/06/25 Python
python和pygame实现简单俄罗斯方块游戏
2021/02/19 Python
python面向对象法实现图书管理系统
2019/04/19 Python
python 实现屏幕录制示例
2019/12/23 Python
Ralph Lauren拉夫·劳伦美国官网:带有浓郁美国气息的高品味时装品牌
2017/11/01 全球购物
Uber Eats台湾:寻找附近提供送餐服务的餐厅
2018/05/07 全球购物
澳大利亚波西米亚风连衣裙在线商店:Fortunate One
2019/04/01 全球购物
加拿大的标志性百货公司:Hudson’s Bay(哈得逊湾)
2019/09/03 全球购物
JAVA中的关键字有什么特点
2014/03/07 面试题
校园创业策划书
2014/01/14 职场文书
网吧消防安全制度
2014/01/28 职场文书
检查机关党的群众路线个人整改措施
2014/10/04 职场文书
慰问信范文
2015/02/14 职场文书
2015年国培研修感言
2015/08/01 职场文书
PyTorch梯度裁剪避免训练loss nan的操作
2021/05/24 Python