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


猜你喜欢

转载自www.cnblogs.com/1624413646hxy/p/11210423.html