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>

 

原文地址:https://www.cnblogs.com/python-daxiong/p/12813539.html