zoukankan      html  css  js  c++  java
  • 模板、cookiesession、中间件、MTV和MVC

    模板

    基本数据类型的渲染

    变量
    <h2>基本数据类型的渲染</h2>
        <h3>基本变量的渲染:{{ name }}</h3>
    
    列表(点方法)
    <ul>
            <li>{{ myli.0 }}</li>
            <li>{{ myli.1 }}</li>
            <li>{{ myli.2 }}</li>
        </ul>
    
    字典(点方法)
    <ul>
            <li>{{ mydict.name }}</li>
            <li>{{ mydict.age }}</li>
        </ul>
    
    列表中套字典(for循环加点方法)
    <ul>
            {% for mydic in teacher%}
            <li>{{ mydict.name }}</li>
            <li>{{ mydict.age }}</li>
            {% endfor %}
        </ul>
    

    母版子板

    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()
    
    html:
    {{ name|upper }}
        {{ name|lower }}
        {{ name|first|upper }}
        {{ name|title }}
        {{ name|truncatewords:'2' }}
        <hr>
        {{ ctime|date:"Y-m-d H:i:s" }}
    
        <hr>
            {{ name|my_func:'kkkk'}}
        <hr>
            {% my_tag 'zekai' 'is' 'jjj' %}
    

    自定义函数

    配置:
    	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' %}		
    

    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值
    request.session.get('name')
    # 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()
    
    设置超时时间:
    set_expire()
    	 
    # 检查 用户session的随机字符串 在数据库中是否
    request.session.exists("session_key")
    
    	 
    # 删除当前用户的所有Session数据
    request.session.delete("session_key")
    request.session.clear()
    request.session.flush()
    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
    

    中间件 (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黑名单中的值

    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
    ```![](https://img2018.cnblogs.com/blog/1659176/201907/1659176-20190718213530885-380942670.png)
  • 相关阅读:
    wireshake抓包,飞秋发送信息,python
    python问题:IndentationError:expected an indented block错误解决《转》
    560. Subarray Sum Equals K
    311. Sparse Matrix Multiplication
    170. Two Sum III
    686. Repeated String Match
    463. Island Perimeter
    146. LRU Cache
    694. Number of Distinct Islands
    200. Number of Islands
  • 原文地址:https://www.cnblogs.com/huanghongzheng/p/11210140.html
Copyright © 2011-2022 走看看