基于django的自定义简单session功能

简单思路:

1.建立自定义session数据库

2.登入时将用户名和密码存入session库

3.将自定义的随机session_id写入cookie中

4.在中间件中,取出浏览器请求中cookie的session_id

5.使用session_id去数据库中比对用户名和密码,成功就访问,失败就重定向到登入页面

没有完善的地方:每次登入都会 生成一个随机字符串和value存入数据库

1.数据库

from django.db import models

# Create your models here.

class Session(models.Model):
id=models.AutoField(primary_key=True)
session_id=models.CharField(max_length=32)
session_value=models.CharField(max_length=64)

2.视图函数

from django.shortcuts import render,HttpResponse
import random,json
# Create your views here.
#导入自定义session中间件类 from app01 import models def set_session():
res = ''
for i in range(4):
num = str(random.randint(1, 9))
letter = chr(random.randint(65, 90))
group = random.choice([num, letter])
res += group
return res def login(request):
if request.method=='GET':
return render(request,'login.html')
else:
name=request.POST.get('name')
pwd=request.POST.get('password')
if name=='maple' and pwd=='':
#用户名和密码通过验证后,登入状态保存到自定义session中
obj=HttpResponse('登入成功')
# 生成自定义session的随机key
my_session_id=set_session()
# 生成自定义session的value
value={'name':name,'password':pwd}
value=json.dumps(value)
# 将自定义session信息存入数据库session_id对应key,session_value对应value
models.Session.objects.create(session_id=my_session_id,session_value=value)
# 将自定义session数据写入cookie发送到浏览器
obj.set_cookie("my_session_id",my_session_id)
return obj
else:
return HttpResponse("用户名或密码错误") # 主页
def index(request):
return render(request,'index.html')

3.中间件

from django.utils.deprecation import MiddlewareMixin
from app01 import models
from django.shortcuts import redirect
import json class SessionMiddle(MiddlewareMixin):
def process_request(self,request):
# 判断如果是登入页面就直接返回
if request.path=="/login/":
return None
else:
# 从cookies中取出my_session_id,然后从数据中取出数据进行比对
my_session_id=request.COOKIES.get("my_session_id")
obj=models.Session.objects.filter(session_id=my_session_id).first()
# 数据库中没有该session_id就重定向到login页面
if obj:
print(obj.session_value)
session_value=json.loads(obj.session_value)
# 判读用户名密码比对成功就登入主页,不成功就重定向到login页面
if session_value.get('name')=='maple'and session_value.get('password')=='':
return None
else:
return redirect('/login/')
else:
return redirect('/login/')

4.url

from django.conf.urls import url
from django.contrib import admin
from app01 import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^login/', views.login),
url(r'^index/', views.index),
]

5.登入html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登入</title>
</head>
<body>
<form action=""method="post">
用户名:<input type="text" name="name">
密码:<input type="password" name="password">
<input type="submit" value="提交">
</form> </body>
</html>

6.主页html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>主页</title>
</head>
<body>
<h1>我是主页</h1>
</body>
</html>

基于django的自定义简单session功能的更多相关文章

  1. 【webSokect】基于django Channels的简单实现

    # settings.py: INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.con ...

  2. web 框架的本质及自定义web框架 模板渲染jinja2 mvc 和 mtv框架 Django框架的下载安装 基于Django实现的一个简单示例

    Django基础一之web框架的本质 本节目录 一 web框架的本质及自定义web框架 二 模板渲染JinJa2 三 MVC和MTV框架 四 Django的下载安装 五 基于Django实现的一个简单 ...

  3. Django之Cookie、Session和自定义分页

    cookie Cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不 ...

  4. 基于Django进行简单的微信开发

    代码地址如下:http://www.demodashi.com/demo/11756.html 一.微信公众号的准备: 1. 注册 访问地址:https://mp.weixin.qq.com/ 按照提 ...

  5. csrf跨站请求伪造、csrf相关装饰器、auth认证模块、基于django中间件设计项目功能

    目录 csrf跨站请求网站 什么是csrf跨站请求网站 经典例子-钓鱼网站 模拟 如何避免这种现象(预防) 如何在django中解决这个问题 form表单 ajax csrf相关装饰器 FBV CBV ...

  6. 基于PHP实现一个简单的在线聊天功能(轮询ajax )

    基于PHP实现一个简单的在线聊天功能(轮询ajax ) 一.总结 1.用的轮询ajax 二.基于PHP实现一个简单的在线聊天功能 一直很想试着做一做这个有意思的功能,感觉复杂的不是数据交互和表结构,麻 ...

  7. Django 中自定义用户模型及集成认证授权功能总结

    1. 概述 Django 中的 django.contrib.auth 应用提供了完整的用户及认证授权功能. Django 官方推荐基于内置 User 数据模型创建新的自定义用户模型,方便添加 bir ...

  8. 基于Server-Sent Event的简单聊天室 Web 2.0时代,即时通信已经成为必不可少的网站功能,那实现Web即时通信的机制有哪些呢?在这门项目课中我们将一一介绍。最后我们将会实现一个基于Server-Sent Event和Flask简单的在线聊天室。

    基于Server-Sent Event的简单聊天室 Web 2.0时代,即时通信已经成为必不可少的网站功能,那实现Web即时通信的机制有哪些呢?在这门项目课中我们将一一介绍.最后我们将会实现一个基于S ...

  9. Django(5) session登录注销、csrf及中间件自定义、django Form表单验证(非常好用)

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

随机推荐

  1. 老男孩python学习自修第十九天【异常处理】

    1.常见的错误 TypeError 类型错误 NameError 没有该变量 ValueError 不期望的值 AttributeError 没有该属性 UnboundLocalError 没有该局部 ...

  2. layui tips

  3. 各个版本spring的jar包以及源码下载地址,目前最高版本到spring4.3.8,留存备用:

    http://maven.springframework.org/release/org/springframework/spring/

  4. codeforces559B

    Equivalent Strings CodeForces - 559B Today on a lecture about strings Gerald learned a new definitio ...

  5. 【数学建模】day07-数理统计II

    方差分析和回归分析. 用数理统计分析试验结果.鉴别各因素对结果影响程度的方法称为方差分析(Analysis Of Variance),记作 ANOVA. 比如:从用不同工艺制作成的灯泡中,各自抽取了若 ...

  6. 【数模】day06-数理统计I

    数理统计. 以样本推断总体,进而用总体研究问题. 分两部分学习,第一部分是基础统计.参数估计.假设检验以及bootstrap方法. 1. 基础统计 假设有如下数据: 要做频数表.直方图.折线图.饼状图 ...

  7. BZOJ5419[Noi2018]情报中心——线段树合并+虚树+树形DP

    题目链接: [NOI2018]情报中心 题目大意:给出一棵n个节点的树,边有非负边权,并给出m条链,对于每条链有一个代价,要求选出两条有公共边的链使两条链的并的边权和-两条链的代价和最大. 花了一天的 ...

  8. Android 下载App

    转载:http://blog.csdn.net/aicpzl/article/details/52993074 通过DownloadManager来下载APK到本地,下载完成后收到广播再安装APK,可 ...

  9. win10系统同时安装python2.7和python3.6

    我是先在本机上安装的python3.6.5,因为要学习一个框架,但是这个框架只支持python2,所以我又安装了python2.7.15,并且配置到系统环境变量 环境变量配置了python3.6.5的 ...

  10. 爬虫_腾讯招聘(xpath)

    和昨天一样的工作量,时间只用了一半,但还是效率有点低了,因为要把两个网页结合起来,所以在列表操作上用了好多时间 import requests from lxml import etree heade ...