模板、cookie\session、中间件、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)
posted @ 2019-07-18 21:32  Huanghongzheng  阅读(167)  评论(0编辑  收藏  举报