在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