• 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>
    
  • 相关阅读:
    咏南树形下拉列表数据敏感控件--TYNdbTreeList
    unigui session超时时间设置
    datasnap——动态注册服务类
    DataSnap——利用TParams进行多表事务更新
    咏南新CS插件开发框架支持DELPHI7
    centos7 samba安装与配置
    centos7设置系统语言为中文
    yndbtree控件
    Linux ClientDataSet libmidas.so.2
    菜单树
  • 原文地址:https://www.cnblogs.com/baolin2200/p/7929738.html
Copyright © 2020-2023  润新知