zoukankan      html  css  js  c++  java
  • django 模板,内置函数,子定制函数,cookie和session

    在Django中模板分为母板和子板,子板继承模板的样式。

    渲染的数据的基本类型:变量,列表,字典,列表套字典。

    母板起布局页面的作用,子板中渲染后台传来的数据。子板需要用到母板中的样式。使用:{% extends “layout.html”%}

    继承母板的css样式使用:{%block mycss%}     {%endblock%}

    继承母板的主体内容:{%block cotent%}     {%endblock%}

    继承母板的js样式: {%block myjs%}     {%endblock%}

    模板导入:当我们自己写了一个非常漂亮的html代码时,我们想在项目中使用的话就可以导入进来

    使用:{% include “html页面” %}

    内置函数:

    在Django中内置函数供我们来对数据进行渲染操作。

    例如控制数据的大小写,在python中,我们是使用的是:str(name).upper 小写:str(name).lower。

    在模块中使用的是:

        {{ name|upper }}
        {{ name|lower }}
        {{ name|first|upper }}
        {{ name|title }}
        {{ name|truncatewords:'2' }}

    我们也可以自定义内置函数来满足我们的需求,

    - 自定义函数
                配置:
                    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.L
                    ibrary()
                    @register.simple_tag()
                    def my_func(val, arg1):
                        return val + arg1
                    用法:
                        {% load xx %}
                        {% my_tag 'zekai' 'is' 'jjj' %}

    cookie和session

    cookie和session的原理是:cookie是存在与客户端浏览器的k,v键值对,session是存在服务器的一份保存有用户敏感信息的键值对,k,是cookie的值,用户在登陆时,发送cookie过来服务器进行比对,比对上后就表示用户是合法用户,不需要输入账号密码就可以登录,如果没有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时会自动帮我们生成cookie。

    生成session:

     request.session['name'] = username
                request.session['pwd'] = pwd
                request.session['age'] = 12

    session在关系型数据库中 保存在Django-session表中,

    在关系型数据库中 session是基于硬盘存储的,如mysql sqllite oracle,db2 

    在非关系型数据库中session存储基于内存:redis,mongdb memcache

    # 用户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失效策略。
                

    可用的存储介质,我们可以在settings中设置sesion的生成:

    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'        # 
                

    中间件(django的请求生命周期)

    我们呢可以自己定制中间件来,做数据的预处理,判断是否是IP黑名单中的值。我们自定义好中间件后需要在settings的中间件中进行配置:

    import m1 
    import m2
    - 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' ]

    MTV 和MVC
    前者指的是Django中的编程思想,后者则是其他各种语言编程思想的简称。

      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


  • 相关阅读:
    Droptiles
    10 条建议让你创建更好的 jQuery 插件
    15个值得开发人员关注的jQuery开发技巧和心得
    8 个最好的 jQuery 树形 Tree 插件
    jQuery的发展史,你知道吗?
    20+个可重复使用的jQuery代码片段
    10 款基于 jQuery 的切换效果插件推荐
    关于浏览器事件的思考
    JS实现复制到剪贴板(兼容FF/Chrome/Safari所有浏览器)
    Javascript函数声明与函数表达式的区别
  • 原文地址:https://www.cnblogs.com/1624413646hxy/p/11210423.html
Copyright © 2011-2022 走看看