zoukankan      html  css  js  c++  java
  • cooke和session

    一、装饰器要加入funtools.wrap装饰

    保留函数的元数据(函数名/注释)

    1.装饰器

    def wrapper(f):
      def inner(*args,**kwargs):
        return f(*args,**kwargs)
      return inner
    

      

    import functools
    
    def wrapper(f):
        @functools.wraps(f)
        def inner(*args,**kwargs):
            return f(*args,**kwargs)
        return inner    
    
    1. 执行wrapper
    2. 重新赋值
    index = wrapper(index)
    @wrapper def index(a1,a2):   """   这是一个index函数   """   return a1+ a2 print(index.__name__) print(index.__doc__)

      

    二、orm字段中的verbose_name

    目前当注释用. 以后:在model form和form中使用.

    三、路由系统中记得加入终止符 $

    url(r'^login/$', admin.site.urls,name='login'),

    四、用户名和密码检测

    xxxx.first() # 返回对象或None

    user_object = models.UserInfo.objects.filter(username=user, password=pwd).first()

    xxxx.exists() # 返回布尔值

    user_object = models.UserInfo.objects.filter(username=user, password=pwd).exists()

    五、模板查找顺序

    1、根目录templates

    2、根据app注册顺序去每个app的tempaltes中找

    六、cookie

    原理

    基于cookie实现
        保存在用户浏览器端的键值对,向服务端发请求时会自动携带。

    操作

    def login(request):
      # return HttpResponse('...')
      # return render('...')
      # return redirect('...')
    # 设置cookie   data = redirect('...')   data.set_cookie()
    # 读取cookie   request.COOKIES.get('xx')   return data
    必须背会一下三个参数:   key, value='', max_age=None

    应用场景: 用户认证 投票 每页默认显示数据

    七、session

    原理:随机字符串的过程....

    基于session实现原理
    
    依赖cookie
    是一种存储数据的方式,依赖于cookie,实现本质:
        用户向服务端发送请求,服务端做两件事:生成随机字符串;为此用户开辟一个独立的空间来存放当前用户独有的值.
        在空间中如何想要设置值:
            request.session['x1'] = 123
            request.session['x2'] = 456
        在空间中取值:
            request.session['x2']
            request.session.get('x2')
        视图函数中的业务操作处理完毕,给用户响应,在响应时会将随机字符串存储到用户浏览器的cookie中.        
    

      

    cookie和session的区别?
    
    答: cookie是存储在客户端浏览器上的键值对,发送请求时浏览器会自动携带. 
    session是一种存储数据方式,基于cookie实现,将数据存储在服务端(django默认存储到数据库).其本质是:
        用户向服务端发送请求,服务端做两件事:生成随机字符串;为此用户开辟一个独立的空间来存放当前用户独有的值.
    
    在空间中如何想要设置值:
        request.session['x1'] = 123
        request.session['x2'] = 456
    在空间中取值:
        request.session['x2']
        request.session.get('x2')
    视图函数中的业务操作处理完毕,给用户响应,在响应时会将随机字符串存储到用户浏览器的cookie中.
    

      拓展:djanago和session相关的配置:

    
    SESSION_COOKIE_NAME = "sessionid" #Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串
    
    SESSION_COOKIE_DOMAIN = None #
    api.baidu.com /www.baidu.com/ xxx.baidu.com
    SESSION_COOKIE_PATH = "/" # Session的cookie保存的路径
    
    SESSION_COOKIE_HTTPONLY = True # 是否Session的cookie只支持http传输
    
    SESSION_COOKIE_AGE = 1209600 # Session的cookie失效日期(2周)
    
    SESSION_EXPIRE_AT_BROWSER_CLOSE = False #是否关闭浏览器使得Session过期
    
    SESSION_SAVE_EVERY_REQUEST = False # 是否每次请求都保存Session,默认修改之后才保存

      

    #django中的session如何设置过期时间:
    
      SESSION_COOKIE_AGE = 1209600 # Session的 cookie失效日期(2周)
    
    
    #django的session默认存储在数据库,可以放在其他地方吗:
    
    小系统:默认放在数据库即可. 
    大系统:缓存(redis)
    
    文件:
    SESSION_ENGINE = 'django.contrib.sessions.backends.file' 
    SESSION_FILE_PATH = '/sssss/'
    
    缓存(内存):
    SESSION_ENGINE = 'django.contrib.sessions.backends.cache' SESSION_CACHE_ALIAS = 'default' 
    CACHES = { 
      'default': { 
        'BACKEND': 
          'django.core.cache.backends.locmem.LocMem Cache', 
          'LOCATION': 'unique-snowflake', 
      } 
    }
    
    缓存(redis):
    SESSION_ENGINE = 'django.contrib.sessions.backends.cache' SESSION_CACHE_ALIAS = 'default'
    CACHES = { 
      "default": { 
        "BACKEND": 
          "django_redis.cache.RedisCache", 
          "LOCATION": "redis://127.0.0.1:6379", 
        "OPTIONS": { 
          "CLIENT_CLASS": 
            "django_redis.client.DefaultClient", 
            "CONNECTION_POOL_KWARGS": {"max_connections": 100} # "PASSWORD": "密码", 
        } 
      } 
    }
    

      

    操作session

    #读取
    request.session['x']
    request.session.get('xx')

    #设置(添加&修改) request.session['x'] = 123

    #删除 del request.session['x']

      

    配置
      数据存储位置
        数据库(django默认)
        文件
        缓存(内存/redis)
    cookie相关操作
    应用场景   用户认证   短信验证过期   权限管理
    强调 session中的数据是根据用户相互隔离. # 示例 def login(request):   # 获取用户提交的用户名和密码   user = request.POST.get('user')   request.session['user_name'] = user
    def index(request): print(request.session['user_name'])

      

     八、Http协议

    什么是HTTP协议

    超文本传输协议
    关于连接:一次请求一次响应之后断开连接(无状态、短连接)
    关于格式:
    请求:请求头+请求体 
      (http:www.baidu.com/index/?a=123)   send("GET /index/?a=123   http1.1 host:www.baidu.com useragent:Chrome ")   send("POST /index/   http1.1 host:www.baidu.com useragent:Chrome username=alex&pwd=123") 响应:响应头+响应体   Content-Encoding: gzip Cache-Control:   private 网页看到的HTML内容
    扩展:常见的请求头都有哪些?
    - user-agent:用什么浏览器访问的网站。 - content-type: 请求体的数据格式是什么?(服务端按照格式要求进行解析)
    扩展:常见的请求方式?
    - GET - POST

     九、django请求生命周期

     django请求生命周期 / 浏览器上输入http://www.xxx.com 请求到 达django后发生了什么?

    补充:

    1、通过js设置cookie

    document.cookie = 'k1=wy222;path=/'
    
    $.cookie('k1','wy222',{path:'/'})
    
    注意:path不同会导致设置不同.

    2、path的作用

    / , 当前网站中所有的URL都能读取到此值.
    
    "", 只能在当前页面访问的到此数据.
    
    /index/ , 只能在/index/xxx 的网页中查看.
  • 相关阅读:
    vb.net 与 c# 运算符区别
    获取任务栏坐标
    获取系统任务栏高度
    【HDOJ5555】Immortality of Frog(状压DP)
    【HDOJ5559】Frog and String(构造)
    【HDOJ5558】Alice's Classified Message(后缀数组)
    【Hihocoder1634】Puzzle Game(DP)
    【HDOJ5981】Guess the number(DP)
    【HDOJ5975】Aninteresting game(BIT原理)
    【HDOJ5973】Game of Taking Stones(Java,威佐夫博弈)
  • 原文地址:https://www.cnblogs.com/YZL2333/p/11636536.html
Copyright © 2011-2022 走看看