模板
基本数据类型的渲染
变量
<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)