基于django的自定义简单session功能
基于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功能的更多相关文章
- 【webSokect】基于django Channels的简单实现
# settings.py: INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.con ...
- web 框架的本质及自定义web框架 模板渲染jinja2 mvc 和 mtv框架 Django框架的下载安装 基于Django实现的一个简单示例
Django基础一之web框架的本质 本节目录 一 web框架的本质及自定义web框架 二 模板渲染JinJa2 三 MVC和MTV框架 四 Django的下载安装 五 基于Django实现的一个简单 ...
- Django之Cookie、Session和自定义分页
cookie Cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不 ...
- 基于Django进行简单的微信开发
代码地址如下:http://www.demodashi.com/demo/11756.html 一.微信公众号的准备: 1. 注册 访问地址:https://mp.weixin.qq.com/ 按照提 ...
- csrf跨站请求伪造、csrf相关装饰器、auth认证模块、基于django中间件设计项目功能
目录 csrf跨站请求网站 什么是csrf跨站请求网站 经典例子-钓鱼网站 模拟 如何避免这种现象(预防) 如何在django中解决这个问题 form表单 ajax csrf相关装饰器 FBV CBV ...
- 基于PHP实现一个简单的在线聊天功能(轮询ajax )
基于PHP实现一个简单的在线聊天功能(轮询ajax ) 一.总结 1.用的轮询ajax 二.基于PHP实现一个简单的在线聊天功能 一直很想试着做一做这个有意思的功能,感觉复杂的不是数据交互和表结构,麻 ...
- Django 中自定义用户模型及集成认证授权功能总结
1. 概述 Django 中的 django.contrib.auth 应用提供了完整的用户及认证授权功能. Django 官方推荐基于内置 User 数据模型创建新的自定义用户模型,方便添加 bir ...
- 基于Server-Sent Event的简单聊天室 Web 2.0时代,即时通信已经成为必不可少的网站功能,那实现Web即时通信的机制有哪些呢?在这门项目课中我们将一一介绍。最后我们将会实现一个基于Server-Sent Event和Flask简单的在线聊天室。
基于Server-Sent Event的简单聊天室 Web 2.0时代,即时通信已经成为必不可少的网站功能,那实现Web即时通信的机制有哪些呢?在这门项目课中我们将一一介绍.最后我们将会实现一个基于S ...
- Django(5) session登录注销、csrf及中间件自定义、django Form表单验证(非常好用)
一.Django中默认支持Session,其内部提供了5种类型的Session供开发者使用: 数据库(默认) 缓存 文件 缓存+数据库 加密cookie 1.数据库Session 1 2 3 4 5 ...
随机推荐
- 记一次生产mysql数据误操作恢复过程
提示:建议每次对数据库进行修改时都做下备份 注意:以下Mysql开启的是row格式的binlog日志,确定到误操作具体时间可能有些麻烦,默认的格式就能很快找出来.这里开启row的原因是还有一种更快的方 ...
- Python 第三方库 cp27、cp35 等文件名的含义(转)
转自 https://blog.csdn.net/lanchunhui/article/details/62417519 转自 https://stackoverflow.com/questions/ ...
- LODOP打印css样式rgba显示黑色区块
当LODOP打印html超文本出现问题的时候,要删减排查一下样式,查看Lodop传入的内部的html超文本和样式,可查看本博客另一篇博文:删减发现有问题的样式,并解决该问题,尽量使用通用的css样式, ...
- Android SDK Mirror
Android SDK Manager - Tools - Option - Proxy Settings - HTTP Proxy Server mirrors.zzu.edu.cn Force H ...
- java split(regex,limit) 使用记录
1.split(“,”,0):是切割默认模式等同于split(",")结尾符合分割字符为空不进行进行分割,如图: 2.split(",",-1):limit参数 ...
- 学习 Spring (十三) AOP 配置
Spring入门篇 学习笔记 Spring 所有的切面和通知器都必须放在一个 内(可以配置包含多个 元素),每一个 可以包含 pointcut, advisor 和 aspect 元素(它们必须按照这 ...
- Running Web API using Docker and Kubernetes
Context As companies are continuously seeking ways to become more Agile and embracing DevOps culture ...
- Nginx 优化缓冲区与传输效率
L:126 这里简单的做个计算 比如 我的服务器带宽是 5M=41943040字节 如果按照公网用PIND的得到延迟结果 icmp_seq=3 ttl=49 time=35.612 ms BDP = ...
- C语言实现字符串逆序输出
方法一: #include <stdio.h> #include <stdlib.h> #include <string.h> void Reverse(char ...
- P1578 奶牛浴场
P1578 奶牛浴场 题目描述 由于John建造了牛场围栏,激起了奶牛的愤怒,奶牛的产奶量急剧减少.为了讨好奶牛,John决定在牛场中建造一个大型浴场.但是John的奶牛有一个奇怪的习惯,每头奶牛都必 ...