zoukankan      html  css  js  c++  java
  • day107-django-session+csrf验证

    Cookie是什么?
      保存在客户端浏览器上的键值对
    Session是什么?
      1.保存在服务端的数据(本质是键值对)

      2.保存位置:有5个,需要在settings.py里面填写:

        2.1 数据库(默认),SESSION_ENGINE = 'django.contrib.sessions.backends.db'   # 引擎(默认)

        2.2 缓存,SESSION_ENGINE = 'django.contrib.sessions.backends.cache'  # 引擎

        2.3 文件,SESSION_ENGINE = 'django.contrib.sessions.backends.file'    # 引擎

        2.4 缓存+数据库,SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db'        # 引擎

        2.5 加密cookie, SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies'   # 引擎

      3. 应用:依赖cookie
          作用:保持会话(Web网站)
          好处:敏感信息不会直接给客户端

      4. settings.py里面可以设置超时时间,每次刷新更新时间,获取、设置、删除Session中数据等操作,

        详情参考:

          https://www.cnblogs.com/wupeiqi/articles/5246483.html

    1.views.py
    
    from django.shortcuts import render,redirect,HttpResponse
    
    def login(request):
        if request.method == 'GET':
            return render(request,'login.html')
        else:
            name = request.POST.get('name')
            password = request.POST.get('password')
            #这里省略了到数据库拿取用户名和密码
            if name == 'a' and password == 's':
                #1.用户名和密码正确,登录成功,通过session生成随机字符串
                #2.放在cookie里返回给浏览器
                #3.同时数据库会自动生成django_session表,这个表生成以随机字符串为key的字典,
                # key对应的value也是字典,可以随意写键值对
                #{
                #   随机字符串1:{'username':'tom','age':18}
                # }
                #以下代码完成上面三步操作,并且给上面的value添加键值对
                request.session['username'] = 'tom'
                request.session['age'] = 18
                return redirect('/index/')
            else:
                return render(request,'login.html',{'error':'用户名或密码错误'})
    
    #因为上面函数return redirect('/index/'),浏览器直接跳转到/index/,向服务器再次发请求。
    def index(request):
        #1.自动获取session的随机字符串
        #2.去数据库匹配这个随机字符串(key),如果匹配成功,就可以拿到value
        #以下这句代码完成上面两步操作
        v = request.session.get('username')
        #如果v非空(也就是登录成功),或者如果v等于tom,都可以
        if v:
            return HttpResponse('%s,恭喜你,登录成功'%v)
        else:
            return redirect('/login/')
    2.login.html
    
    <body>
    <form method="POST" action="/login/">
        {% csrf_token %}
        <p>用户名:
            <input type="text" name="name">
        </p>
        <p>密码:
            <input type="password" name="password">
        </p>
        <p><input type="submit" value="登录"></p>{{ error }}
    </form>
    </body>

     

  • 相关阅读:
    [Redis-CentOS7]Redis设置连接密码(九)
    [Redis-CentOS7]Redis数据持久化(八)
    PAT Advanced 1101 Quick Sort (25分)
    PAT Advanced 1043 Is It a Binary Search Tree (25分)
    HTTP协议
    PAT Advanced 1031 Hello World for U (20分)
    自然码双拼快速记忆方案
    macOS 原生输入法设置自然码
    PAT Advanced 1086 Tree Traversals Again (25分)
    PAT Advanced 1050 String Subtraction (20分)
  • 原文地址:https://www.cnblogs.com/python-daxiong/p/12813539.html
Copyright © 2011-2022 走看看