cookie与session

cookie与session

     cookie不属于http协议范围,由于http协议无法保持状态,但实际情况,我们却又需要“保持状态”,因此cookie就是在这样一个场景下诞生。
     cookie的工作原理是:由服务器产生内容,浏览器收到请求后保存在本地;当浏览器再次访问时,浏览器会自动带上cookie,这样服务器就能通过cookie的内容来判断这个是“谁”了。

通过session实现用户认证

cookie  是牌牌,是一个允许服务器在这个上面写内容的一个容器{};保留在客户端(浏览器)
session 是小本子,是记录哪个牌牌对应哪个值的载体容器;保留在服务器上的一个容器,可以是关系型数据库,也可以是非关系型数据库或者文本中;  
# 默认将 session 写在表 django_session 中;

0.urls.py设置

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),
    url(r'^logout/', views.log_out),
]

1.models.py设置

from django.db import models

class UserInfo(models.Model):
    name = models.CharField(max_length=32)
    pwd = models.CharField(max_length=32)

2.views.py设置

from django.shortcuts import render,HttpResponse,redirect

# Create your views here.
from app01 import models

def login(request):
    if request.method == "POST":
        username = request.POST.get("user")
        password = request.POST.get("pwd")
        
        # 将获取的值,在数据库做对应比较,如果匹配
        ret = models.UserInfo.objects.filter(name=username,pwd=password)
        if ret:
            # 匹配给 session 绑定相应的值
            request.session["is_login_lin"]=True

            # 定义 session 值
            request.session["name"]=username
            return redirect("/index/")
        else:
            return redirect("/login/")
    return render(request, "login.html")


def index(request):
    # 判断 定义的 request.session 中是否有 is_login_lin 
    if not request.session.get("is_login_lin"):
        # 没有直接返回到登录页面
        return redirect("/login/")
    
    name = request.session.get("name")
    # 有登录信息,将页面跳转至 index.html
    return render(request,"index.html",locals())


def log_out(request):
    # 注销使用 request.session.flush()
    request.session.flush()
    return redirect("/login/")

3.index.html和login.html设置
登录页面:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="/login/" method="post">
    {% csrf_token %}
    <p>姓名:<input name="user" type="text"></p>
    <p>密码:<input name="pwd" type="text"></p>
    <input type="submit">
</form>
</body>
</html>

首页:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>欢迎你 {{ name }}</h1>
    <a href="/logout/">注销</a>
</body>
</html>
posted @ 2017-11-30 16:40  叨客厨子  阅读(206)  评论(0编辑  收藏  举报