django 1.11 widgets官方文档

一个 widget 对应一个 HTML form input标签,有两个功能,一是用于 HTML 渲染,二是 从 GET/POST 字典抽出数据。
不要将Widget 与表单字段搞混淆。表单字段负责验证输入并直接在模板中使用。Widget 负责渲染网页上HTML 表单的输入元素和提取提交的原始数据。但是,Widget 需要赋值给表单的字段。
Field类表现* 校验逻辑* ,而widgets表现* 显示逻辑* 。

每个表单字段都对应一个widget class 它对应一个HTML 表单Widget,例如<input type="text">,

在大多数情况下字段都具有一个合理的widget

例如在默认情况下:
CharFiled, 具有一个TextInput Widget,它在HTML 中生成一个<input type="text">,

EmailField 它在HTML中生成一个<input type="email">.

 

这些只是默认的表示;你可以使用Widget 指定字段使用哪种HTML

例如你想把input标签的type="text",设置为type="password",这时候你需要进行下边的这些操作

在form组件中实现password的属性

from django.forms import widgets
password=forms.CharField(widget=widgets.PasswordInput(attrs={"class":"form-control","placeholder":"请输入密码"}),
                             error_messages={
                                 "required":"密码不能为空"
                             } )

django的缓存机制

详情见http://www.cnblogs.com/yuanchenqi/articles/8034442.html

缓存(cache)介绍

在动态网站中,用户所有的请求,服务器都会去数据库中进行相应的增,删,查,改,渲染模板,执行业务逻辑,最后生成用户看到的页面.

当一个网站的用户访问量很大的时候,每一次的的后台操作,都会消耗很多的服务端资源,所以必须使用缓存来减轻后端服务器的压力.

缓存是将一些常用的数据保存内存或文件或其他的数据库中,在一定的时间内有人来访问这些数据时,则不再去执行本数据库及渲染等操作,而是直接从内存或文件中去取得数据,然后返回给用户.

注意:缓存不一定缓存到内存中,还有可能缓存到文件中或数据库中。

缓存的原理

  • 将数据写入/读取速度更快的存储(设备);

  • 将数据缓存到离应用最近的位置;

  • 将数据缓存到离用户最近的位置。

2、缓存分类

在分布式系统中,缓存的应用非常广泛,从部署角度有以下几个方面的缓存应用。

  • CDN缓存;

  • 反向代理缓存;

  • 分布式Cache;

  • 本地应用缓存;

3.缓存设计

缓存什么?

1.热点数据;2.静态资源。

缓存的位置?

CDN,反向代理,分布式缓存服务器,本机(内存,硬盘)

如何缓存的问题?

  • 过期策略

  • 固定时间:比如指定缓存的时间是30分钟;

  • 相对时间:比如最近10分钟内没有访问的数据;

  • 同步机制

  • 实时写入;(推)

  • 异步刷新;(推拉)

CDN

CDN的全称是Content Delivery Network,即内容分发网络

CDN主要解决将数据缓存到离用户最近的位置,一般缓存静态资源文件(页面,脚本,图片,视频,文件等)。国内网络异常复杂,跨运营商的网络访问会很慢。为了解决跨运营商或各地用户访问问题,可以在重要的城市,部署CDN应用。使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。

 

1、CND原理

CDN的基本原理是广泛采用各种缓存服务器,将这些缓存服务器分布到用户访问相对集中的地区或网络中,在用户访问网站时,利用全局负载技术将用户的访问指向距离最近的工作正常的缓存服务器上,由缓存服务器直接响应用户请求。

反向代理缓存

反向代理是指在网站服务器机房部署代理服务器,实现负载均衡、数据缓存、安全控制等功能。

1、缓存原理

反向代理位于应用服务器机房,处理所有对WEB服务器的请求。如果用户请求的页面在代理服务器上有缓冲的话,代理服务器直接将缓冲内容发送给用户。如果没有缓冲则先向WEB服务器发出请求,取回数据,本地缓存后再发送给用户。通过降低向WEB服务器的请求数,从而降低了WEB服务器的负载。

 反向代理一般缓存静态资源,动态资源转发到应用服务器处理。常用的缓存应用服务器有Varnish、Ngnix、Squid

分布式缓存

而分布式缓存,主要指缓存用户经常访问数据的缓存,数据源为数据库。一般起到热点数据访问和减轻数据库压力的作用。

目前分布式缓存设计,在大型网站架构中是必备的架构要素。常用的中间件有Memcache,Redis。

本地缓存

本地缓存是指应用内部的缓存,标准的分布式系统,一般有多级缓存构成。本地缓存是离应用最近的缓存,一般可以将数据缓存到硬盘或内存。

1、硬盘缓存

将数据缓存到硬盘到,读取时从硬盘读取。原理是直接读取本机文件,减少了网络传输消耗,比通过网络读取数据库速度更快。可以应用在对速度要求不是很高,但需要大量缓存存储的场景。

2、内存缓存 

直接将数据存储到本机内存中,通过程序直接维护缓存对象,是访问速度最快的方式。

 django提供了6种缓存机制

  • 开发调试缓存
  • 内存缓存 (注意这个内存是django自己管理的,并不是用的redis或memcache)
  • 文件缓存 (注意硬盘中的文件缓存要比数据库缓存快)
  • 数据库缓存
  • Memcache缓存(使用python-memcached模块)
  • Memcache缓存(使用pylibmc模块)

经常使用的有文件缓存和Mencache缓存

并没有设置redis缓存,这个接口要自己写

djano的信号

Django提供一种信号机制。其实就是观察者模式,又叫发布-订阅(Publish/Subscribe) 。当发生一些动作的时候,发出信号,然后监听了这个信号的函数就会执行。

通俗来讲,就是一些动作发生的时候,信号允许特定的发送者去提醒一些接受者。用于在框架执行操作时解耦。

特别注意的是要把触发的函数写在项目的init文件中

详情见http://www.cnblogs.com/yuanchenqi/articles/8034442.html

更好的案例:https://www.cnblogs.com/renpingsheng/p/7566647.html

 情景

每创建一条数据库记录,就写到日志中

 

posted on 2018-02-06 19:45  程序员一学徒  阅读(163)  评论(0编辑  收藏  举报