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 相关文章推荐
Python3基础之条件与循环控制实例解析
Aug 13 Python
跟老齐学Python之集成开发环境(IDE)
Sep 12 Python
python自动化测试之从命令行运行测试用例with verbosity
Sep 28 Python
详解Python函数可变参数定义及其参数传递方式
Aug 02 Python
tensorflow1.0学习之模型的保存与恢复(Saver)
Apr 23 Python
python实现按长宽比缩放图片
Jun 07 Python
Python求两点之间的直线距离(2种实现方法)
Jul 07 Python
Python生成个性签名图片获取GUI过程解析
Dec 16 Python
详解Python中字符串前“b”,“r”,“u”,“f”的作用
Dec 18 Python
Python类super()及私有属性原理解析
Jun 15 Python
tensorflow/core/platform/cpu_feature_guard.cc:140] Your CPU supports instructions that this T
Jun 22 Python
Python ConfigParser模块的使用示例
Oct 12 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按百分比生成缩略图的代码分享
2014/05/10 PHP
php使用百度ping服务代码实例
2014/06/19 PHP
ThinkPHP的cookie和session冲突造成Cookie不能使用的解决方法
2014/07/01 PHP
php解决DOM乱码的方法示例代码
2016/11/20 PHP
微信封装的调用微信签名包的类库
2017/06/08 PHP
laravel5 Eloquent 实现事务方式
2019/10/21 PHP
PHP 出现 http500 错误的解决方法
2021/03/09 PHP
nicejforms——美化表单不用愁
2007/02/20 Javascript
JQUERY对单选框(radio)操作的小例子
2013/04/25 Javascript
Jquery增加鼠标中间功能mousewheel的实例代码
2013/09/05 Javascript
JavaScript使用focus()设置焦点失败的解决方法
2014/09/03 Javascript
JavaScript实现页面跳转的几种常用方式
2015/11/28 Javascript
第四章之BootStrap表单与图片
2016/04/25 Javascript
前端js弹出框组件使用方法
2020/08/24 Javascript
微信小程序 生命周期和页面的生命周期详细介绍
2017/01/19 Javascript
JS中from 表单序列化提交的代码
2017/01/20 Javascript
浅析Angular2子模块以及异步加载
2017/04/24 Javascript
讲解vue-router之什么是编程式路由
2018/05/28 Javascript
Vue移动端项目实现使用手机预览调试操作
2020/07/18 Javascript
[58:11]守擂赛第二周擂主赛 DeMonsTer vs Leopard
2020/04/28 DOTA
python缩进区别分析
2014/02/15 Python
Python使用MD5加密字符串示例
2014/08/22 Python
Python获取指定文件夹下的文件名的方法
2018/02/06 Python
python实现猜单词小游戏
2020/05/22 Python
Python中字典与恒等运算符的用法分析
2019/08/22 Python
python argparser的具体使用
2019/11/10 Python
python3.7 openpyxl 在excel单元格中写入数据实例
2020/09/01 Python
HTML5 canvas基本绘图之绘制曲线
2016/06/27 HTML / CSS
html5写一个BUI折叠菜单插件的实现方法
2019/09/11 HTML / CSS
亚马逊西班牙购物网站:amazon西班牙
2017/03/06 全球购物
东芝官网商城:还原日式美学,打造美好生活
2018/12/27 全球购物
澳大利亚珍珠首饰购物网站:Vayo Pearls
2019/03/11 全球购物
波兰珠宝品牌:YES
2019/08/09 全球购物
某公司Java工程师面试题笔试题
2016/03/27 面试题
保险公司演讲稿
2014/09/02 职场文书
教师节晚会主持词
2015/06/30 职场文书