第四十六章:session 验证

1. djagno ORM 数据列类型
 
  mysql      djagno
  int         interfiled
  
  
  
  
  参数:
   null : true
   default : 设置默认值
   max_length: 最大长度
   unique: 唯一索引
   联合唯一索引:
    class Meta:
     unique_together = (
      ("id", 'name')
     )
   普通联合索引:
    class Meta:
     index_together = (
      ("id", 'name')
     )
   
   db_index : 设置普通索引
   
   db_column: 设置列名
   
 2. Djagno admin 列类型:
  
  EmailFiled: 验证邮箱是否正确
  
  fileFiled: 验证文件是否上传
  。。。。。
  
  参数: 
   blank: True、false
   versobse_name: 显示字段名
   editable            Admin中是否可以编辑
   help_text           Admin中该字段的提示信息
   choices             Admin中显示选择框的内容,用不变动的数据放在内存中从而避免跨表操作
   choices = (
    (1, '男'),
    (2, '女')
   )
   gender = models.IntegerField(choices=chocies)
  
  
 3. 分页:
  
  
  内置的分页:
   
   paginator
  
   缺点:
    页码只能全部显示
  
  自定制分页:
   
   1. models.xxxx.objects.all()[start:stop]
   2. 判断极值
    最左边:
     half
     
    最右边:
     half
   
  ps:
   自己用过的分页工具:
    1. class类
    2. dataTables (https://datatables.net)
   
    
 4. CSRF:
  
  
  settings:
   MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
   ]
  
  @csrf_exempt  @csrf_protect
  
 

今天内容:
 
 1. 模板 (永远是渲染页面的作用)
  
  - 基本数据类型 渲染
   a. 变量
   b. 列表
   c。 字典
   d。列表中套字典
   
  - 母版
   layout.html 布局页面
    {%block mycss%}
    
    {%endblock%}
   子版继承:
    {% extends “layout.html”%}
    
    {%block mycss%}
     link
     script src
    {%endblock%}
  
  - 导入
   
   自己写了一个非常漂亮的 html 代码 (html页面)
   
   {% include “html页面” %}
  - 内置函数
   
   python:
    str  = “zekai”
    str.upper()
    str.lower()
   
   母版语言:
    
    
  - 自定义函数
   配置:
    a、在app中创建templatetags模块
    b. 创建xx.py
   
   
   - simple_filter:
    
    from django import template
    register = template.Library()
    @register.filter()
    def my_func(val, arg1):
     return val + arg1
    
    注意:
     1. 只能传入一个参数
     2. 函数名和参数之间不能有空格
    用法 :
     {% load xx %}
     {{ name|my_func:'kkkk'}}
   
   - simple_tag:
   
    from django import template
    register = template.Library()
    
    @register.simple_tag()
    def my_func(val, arg1):
     return val + arg1
    
    用法:
     {% load xx %}
     {% my_tag 'zekai' 'is' 'jjj' %}
   
 2. cookie和session (********************************)
  
  原理:
   - cookie:
    存在于客户端浏览器的一个key-val的随机字符串(键值对)
    
    服务端返回的
     {"键": cookie值}
   - session
    
    存在于服务端的包含用户敏感信息的键值对
    
    {
     “cookie值” : {“name”:‘zekai’, 'age‘:18},
     “cookie值1” : {“name”:‘zekai2’, 'age‘:34},
     “cookie值2” : {“name”:‘zekai3’, 'age‘:45},
     “cookie值3” : {“name”:‘zekai4’, 'age‘:56},
    }
   
   
   
  具体使用:
   
   ### 获取session
   ### 查询session值
   # print(request.session.keys()) ### dict_keys(['name', 'pwd', 'age'])
   # print(request.session.values()) ###  dict_values(['zekai', '123', 12])
   # print(request.session.items())   ### dict_items([('name', 'zekai'), ('pwd', '123'), ('age', 12)])
   
   
   
   ### 设置session值
            request.session['name'] = username
            request.session['pwd'] = pwd
            request.session['age'] = 12
   
   
   # 用户session的随机字符串
   request.session.session_key
 
   # 将所有Session失效日期小于当前日期的数据删除
   request.session.clear_expired()
 
   # 检查 用户session的随机字符串 在数据库中是否
   request.session.exists("session_key")
 
   # 删除当前用户的所有Session数据
   request.session.delete("session_key")
 
   request.session.set_expiry(value)
    * 如果value是个整数,session会在些秒数后失效。
    * 如果value是个datatime或timedelta,session就会在这个时间后失效。
    * 如果value是0,用户关闭浏览器session就会失效。
    * 如果value是None,session会依赖全局session失效策略。
   
  
   
  可以使用的存储介质:
   
   1. SESSION_ENGINE = 'django.contrib.sessions.backends.db'   # 引擎(默认)
    
    SESSION_COOKIE_NAME = "sessionid"                       # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串(默认)
    SESSION_COOKIE_PATH = "/"                               # Session的cookie保存的路径(默认)
    SESSION_COOKIE_DOMAIN = None                             # Session的cookie保存的域名(默认)
    SESSION_COOKIE_SECURE = False                            # 是否Https传输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                       # 是
   
 
   2. SESSION_ENGINE = 'django.contrib.sessions.backends.cache'  # 引擎
     SESSION_CACHE_ALIAS = 'default'                            # 使用的缓存别名(默认内存缓存,也可以是memcache),此处别名依赖缓存的设置
    
    
     SESSION_COOKIE_NAME = "sessionid"                        # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串
     SESSION_COOKIE_PATH = "/"                                # Session的cookie保存的路径
     SESSION_COOKIE_DOMAIN = None                              # Session的cookie保存的域名
     SESSION_COOKIE_SECURE = False                             # 是否Https传输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                        #
   
   3.  SESSION_ENGINE = 'django.contrib.sessions.backends.file'    # 引擎
    SESSION_FILE_PATH = None                                    # 缓存文件路径,如果为None,则使用tempfile模块获取一个临时地址tempfile.gettempdir()                                                            # 如:/var/folders/d3/j9tj0gz93dg06bmwxmhh6_xm0000gn/T
   
   
    SESSION_COOKIE_NAME = "sessionid"                          # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串
    SESSION_COOKIE_PATH = "/"                                  # Session的cookie保存的路径
    SESSION_COOKIE_DOMAIN = None                                # Session的cookie保存的域名
    SESSION_COOKIE_SECURE = False                               # 是否Https传输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      
   
   4. 配置 settings.py
 
    SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db'        #
   
   
   
   ##分布式session存储
   
  补充:
   关系型数据库:(基于硬盘的)
     sqllite  mysql oracle db2
   
   菲关系型数据库:(基于内存的)
    redis, mongdb, memcahce
      
 
 3. 中间件  (django的请求生命周期)
  
  - class 类
   
   - process_request : 请求必经的一个方法
   - process_response: 这个响应必经的一个方法
   
   - process_view
   
  - settings: 
   MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'm1.M1',
    'm2.M2'
   ]
   
  - 应用:
   做预处理的时候, 将代码写 在中间件中
   判断是否是IP黑名单中的值
   .....
  

 4. MTV 和 MVC
  
  
  MVC:
   
   项目目录结构的设计模式
   
   
   客户       ------点餐-------->    服务员  ------处理菜单需求--------> 厨师
        <------------------            <-------------------------  
   
   (浏览器)  ------------------->  函数或者类处理  ------------------>  数据库
              业务逻辑
   views:                         controllers                          models:
            loginController.py     LoginModel.py
            UserController.py                   UserModel.py
    大量html页面                        
    
   
  MVC
   
   django:
    M : models
    T : Templates (各种html页面) 相当于views
    V :Views(视图处理函数) 相当于 controllers
   
  
  

猜你喜欢

转载自www.cnblogs.com/haojunliancheng/p/11209778.html