Day64(模板、cookie与session、中间件、WVC与MTV)

1. 模板(永远是渲染页面的作用)

1.1 基本数据类型

变量、列表、字典、列表套字典

1.2 母版

layout.html 布局页面

{%block mycss%}

{%endblock%}

子版继承:

{% extends “layout.html”%}

{%block mycss%}
  link
  script src
{%endblock%}

1.3 导入

自己写了一个非常漂亮的 html 代码 (html页面)

{% include “html页面” %}

1.4 内置函数

{{ name|upper }}    # 将名字大写

{{ name|lower }}     #  将名字小写

{{ name|first|upper }}  # 取出第一个字母并大写
 
{{ name|title }}      # 将名字首字母全部大写
 
{{ name|truncatewords:'2' }}  # this is xxx yyy  ====>>> this is ...

{{ ctime|date:"Y-m-d H:i:s" }}  # 时间格式

1.5 自定义函数

simple_filter

simple_tag

 1.5.1 配置

a、在app中创建templatetags模块

b. 创建xx.py

1.5.2 使用

1. 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'}}

2. 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

2.1 什么是cookie 

Cookie是key-value结构,类似于一个python中的字典。随着服务器端的响应发送给客户端浏览器。然后客户端浏览器会把Cookie保存起来,当下一次再访问服务器时把Cookie再发送给服务器。 Cookie是由服务器创建,然后通过响应发送给客户端的一个键值对。客户端会保存Cookie,并会标注出Cookie的来源(哪个服务器的Cookie)。当客户端向服务器发出请求时会把所有这个服务器Cookie包含在请求中发送给服务器,这样服务器就可以识别客户端了!

2.2 cookie的原理

cookie的工作原理是:由服务器产生内容,浏览器收到请求后保存在本地;当浏览器再次访问时,浏览器会自动带上Cookie,这样服务器就能通过Cookie的内容来判断这个是“谁”了。

2.3 Django中cookie操作

2.3.1 获取cookie

request.COOKIES['key']
request.get_signed_cookie(key, default=RAISE_ERROR, salt='', max_age=None)

2.3.1 设置cookie

rep = HttpResponse(...)
rep = render(request, ...)

rep.set_cookie(key,value)
rep.set_signed_cookie(key,value,salt='加密盐')

2.3.3 参数介绍

key, 键
value='', 值
max_age=None, 超时时间 cookie需要延续的时间(以秒为单位)如果参数是\ None`` ,这个cookie会延续到浏览器关闭为止
expires=None, 超时时间(IE requires expires, so set it if hasn't been already.)
path='/', Cookie生效的路径,/ 表示根路径,特殊的:根路径的cookie可以被任何url的页面访问,浏览器只会把cookie回传给带有该路径的页面,这样可以避免将cookie传给站点中的其他的应用。
domain=None, Cookie生效的域名 你可用这个参数来构造一个跨站cookie。如, domain=".example.com"所构造的cookie对下面这些站点都是可读的:www.example.com 、 www2.example.com 和an.other.sub.domain.example.com 。如果该参数设置为 None ,cookie只能由设置它的站点读取
secure=False, 浏览器将通过HTTPS来回传cookie
httponly=False 只能http协议传输,无法被JavaScript获取(不是绝对,底层抓包可以获取到也可以被覆盖)

2.3.4 删除cookie

def logout(request):
    rep = redirect("/login/")
    rep.delete_cookie("user")  # 删除用户浏览器上之前设置的usercookie值
    return rep

2.4 session

2.4.1 基本使用

# 获取、设置、删除Session中数据
request.session['k1']
request.session.get('k1',None)
request.session['k1'] = 123
request.session.setdefault('k1',123) # 存在则不设置
del request.session['k1'] 


# 所有 键、值、键值对
request.session.keys()
request.session.values()
request.session.items()
request.session.iterkeys()
request.session.itervalues()
request.session.iteritems()

# 用户session的随机字符串
request.session.session_key

# 将所有Session失效日期小于当前日期的数据删除
request.session.clear_expired()

# 检查会话session的key在数据库中是否存在
request.session.exists("session_key")

# 删除当前会话的所有Session数据(只删数据库)
request.session.delete()
  
# 删除当前的会话数据并删除会话的Cookie(数据库和cookie都删)。
request.session.flush() 
    这用于确保前面的会话数据不可以再次被用户的浏览器访问
    例如,django.contrib.auth.logout() 函数中就会调用它。

# 设置会话Session和Cookie的超时时间
request.session.set_expiry(value)
    * 如果value是个整数,session会在些秒数后失效。
    * 如果value是个datatime或timedelta,session就会在这个时间后失效。
    * 如果value是0,用户关闭浏览器session就会失效。
    * 如果value是None,session会依赖全局session失效策略。

2.4.2 session配置

1. 数据库Session
SESSION_ENGINE = 'django.contrib.sessions.backends.db'   # 引擎(默认)

2. 缓存Session
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'  # 引擎
SESSION_CACHE_ALIAS = 'default'                            # 使用的缓存别名(默认内存缓存,也可以是memcache),此处别名依赖缓存的设置

3. 文件Session
SESSION_ENGINE = 'django.contrib.sessions.backends.file'    # 引擎
SESSION_FILE_PATH = None                                    # 缓存文件路径,如果为None,则使用tempfile模块获取一个临时地址tempfile.gettempdir() 

4. 缓存+数据库
SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db'        # 引擎

5. 加密Cookie Session
SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies'   # 引擎

其他公用设置项:
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                       # 是否每次请求都保存Session,默认修改之后才保存(默认)

3. 中间件(Django请求的生命周期)

3.1 什么是中间件

中间件顾名思义,是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出

- class 类

    process_request : 请求必经的一个方法
    process_response: 这个响应必经的一个方法

    process_view

3.2 中间件位置

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

3.3 应用

做预处理的时候, 将代码写 在中间件中
判断是否是IP黑名单中的值

 

 

 

 

Day64(模板、cookie与session、中间件、WVC与MTV)

 4. MVC和MTV

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

 

上一篇:使用django的MTV开发模式返回一个网页


下一篇:Django