zoukankan      html  css  js  c++  java
  • 基于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=='123':
                #用户名和密码通过验证后,登入状态保存到自定义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')=='123':
                        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>
  • 相关阅读:
    .net core app的几个依赖究竟是什么
    ocelot identityserver4 consul整合漫谈
    错位重排算法公式的理解
    IIS证书配置。。这究竟是为什么
    .net core修改IIS发布的环境变量
    服务注册和发现组件-consul
    记一次失败的ubuntu虚拟机配置过程。。。
    .net core统一认证学习笔记(一)ocelot分析
    第四天
    第三天
  • 原文地址:https://www.cnblogs.com/angelyan/p/10324744.html
Copyright © 2011-2022 走看看