精华内容
下载资源
问答
  • 通过X射线衍射、需水性、活性和减水剂的相容性试验,对比分析了各种CFB粉煤灰的性能。结果表明:F1的晶体矿物种类最多,但是无定型态矿物含量最低;未经粉磨的三种CFB粉煤灰需水性大,活性低,当比表面积达到600 m2/kg,需...
  • 作为主板产品中的最重要元件,电容在主板各种元件中的地位一直非常突出,因为某种意义上来讲,电容的好坏决定了主板的寿命,以及主板的真实超频能力。正因为如此,很多喜欢用原料学来吸引消费者的品牌,总是喜欢在...
  • 主要介绍了磁盘阵列RAID原理、种类及性能优缺点对比,根据硬件与硬盘数量选择适合自己的磁盘阵列很重要,需要的朋友可以参考下
  • CSS选择符的种类以及对比分析

    千次阅读 2015-08-18 21:27:31
    CSS选择符 ... 选择符的种类有一下七种:    标签选择符:就是Xhtml的元素,比如:,等,操作范围是一种标签的范围,由于操作范围比较广,常用语格式化标签的默认属性,解决浏览器的兼容性问题。 

    CSS选择符

                选择符就是你要操作的XHtml元素,可以使Xhtml标签,比如<p></p>;可以使标签的class属性,例如<p class = "selector_name"></p>;也可以是标签的ID属性,例如:<p id = "id_name"></p>;

             选择符的种类有一下七种

    1.          标签选择符:就是Xhtml的元素,比如:<p></p>,<div></div>等,操作范围是一种标签的范围,由于操作范围比较广,常用语格式化标签的默认属性,解决浏览器的兼容性问题。
    2.          类选择符:就是标签的类属性值确定操作的元素,比如<p class = "color"></p>,<div class = "color"></div>,对color操作,就是对定义类属性为color的标签操作,操作范围是某一类元素的范围,可以为将不同的标签归结为一类,做共同的操作。
    3.         ID选择符:就是操作id属性为某一值的元素,由于id的唯一性,可以“特殊化”某一元素。
    4.         嵌套选择符:就是对元素内的元素进行操作,比如<p >类选择符<span >第四种</span></p>,对其span操作可以是这样的 p span{属性:值},可以减少定义的id或class,达到优化代码的目的。
    5.        分组选择符:就是对要操作的标签,id,class共同操作,不同元素有逗号隔开,划分为一组,就是分组选择符,分组选择符灵活性较高,也是较为常用的选择符。
    6.        标签指定选择符:就是指定某一标签的操作,需要为这个标签定义id或class,例如<h1 class="class_name">选择符练习</h1>,对其可以这样操作:h1.class_name{属性:值},比较不常用。
    7.       混合选择符:就是对以上六种选择符的综合使用,具有你想有的任何特性和优点。

    展开全文
  • 磁盘阵列RAID原理、种类及性能优缺点对比 磁盘阵列(Redundant Arrays of Independent Disks,RAID) 1. 存储的数据一定分片; 2. 分基于软件的软RAID(如mdadm)和基于硬件的硬RAID(如RAID卡); 3. RAID卡...

    本文转载自

    https://www.cnblogs.com/chuncn/p/6008173.html

    磁盘阵列RAID原理、种类及性能优缺点对比

    磁盘阵列(Redundant Arrays of Independent Disks,RAID)

    1. 存储的数据一定分片;

    2. 分基于软件的软RAID(如mdadm)和基于硬件的硬RAID(如RAID卡);

    3. RAID卡如同网卡一样有集成板载的也有独立的(PCI-e),一般独立RAID卡性能相对较好,淘宝一搜便可看到他们的原形;

    4. 现在基本上服务器都原生硬件支持几种常用的RAID;

    5. 当然还有更加高大上的专用于存储的磁盘阵列柜产品,有专用存储技术,规格有如12/24/48盘一柜等,盘可选机械/固态,3.5/2.5寸等。

     

     

     

    级别

    特征

    原理

    单元

    冗余

    性能

    利用率

    最多坏

    用途

    缺陷

    RAID0

    条带

    分片分散存入2块硬盘

    2

    读写速度2倍

    100%

    0/2

    SWAP/TMP

    不冗余,数据难恢复

    RAID1

    镜像

    相同数据存入2块硬盘

    2

    写速度不变

    读速度2倍

    50%

    1/2

    数据备份

    读写速度没加,利用率低

    RAID4

    校验

    分片分散存入2块硬盘

    校验码存入第3块硬盘

    3

    读写速度2倍

    2/3=66%

    1/3

    用的很少

    1. 坏盘时另外2块需要重新计算还原坏盘数据

    2. 校验码盘压力大成为瓶颈

    RAID5

    校验

    分片和校验码混合存储

    3

    读写速度2倍

    2/3=66%

    1/3

    用的不多

    坏盘时另外2块需要重新计算还原坏盘数据

    RAID6

    校验

    分片盘校验码盘分别2个

    数据分片校验码计算2次

    4

    读写速度2倍

    2/4

    2/4

    1∈2

    用的很少

    “部队中有一半是搞后勤的,感觉还是不太爽。”

    RAID10

    1+0

    2块硬盘1组先做RAID1

    多组RAID1再做RAID0

    4

    读写速度N倍

    N为组数

    2/4

    2/4

    1∈2

    用的最多

    -

    RAID50

    5+0

    3块硬盘1组先做RAID5

    多组再做RAID0

    6

    读写数读2N倍

    N为组数

    4/6

    2/6

    1∈3

    土豪用的

    “好是好,就是贵!”

     

     

     

        近来想建立一个私有云系统,涉及到安装使用一台网络存储服务器。对于服务器中硬盘的连接,选用哪种RAID模式能准确满足需求收集了资料,简单整理后记录如下:

        一、RAID模式优缺点的简要介绍

        目前被运用较多的RAID模式其优缺点大致是这样的:

        1、RAID0模式

        优点:在RAID 0状态下,存储数据被分割成两部分,分别存储在两块硬盘上,此时移动硬盘的理论存储速度是单块硬盘的2倍,实际容量等于两块硬盘中较小一块硬盘的容量的2倍。

        缺点:任何一块硬盘发生故障,整个RAID上的数据将不可恢复。

        备注:存储高清电影比较适合。

        2、RAID1模式

        优点:此模式下,两块硬盘互为镜像。当一个硬盘受损时,换上一块全新硬盘(大于或等于原硬盘容量)替代原硬盘即可自动恢复资料和继续使用,移动硬盘的实际容量等于较小一块硬盘的容量,存储速度与单块硬盘相同。RAID 1的优势在于任何一块硬盘出现故障是,所存储的数据都不会丢失。

        缺点:该模式可使用的硬盘实际容量比较小,仅仅为两颗硬盘中最小硬盘的容量。

        备注:非常重要的资料,如数据库,个人资料,是万无一失的存储方案。

        3、RAID 0+1模式

        RAID 0+1是磁盘分段及镜像的结合,采用2组RAID0的磁盘阵列互为镜像,它们之间又成为一个RAID1的阵列。硬盘使用率只有50%,但是提供最佳的速度及可靠度。

        4、RAID 3模式

        RAID3是把数据分成多个“块”,按照一定的容错算法,存放在N+1个硬盘上,实际数据占用的有效空间为N个硬盘的空间总和,而第N+1个硬盘存储的数据是校验容错信息,当这N+1个硬盘中的其中一个硬盘出现故障时,从其它N个硬盘中的数据也可以恢复原始数据。

        5、RAID 5模式

        RAID5不对存储的数据进行备份,而是把数据和相对应的奇偶校验信息存储到组成RAID5的各个磁盘上,并且奇偶校验信息和相对应的数据分别存储于不同的磁盘上。当RAID5的一个磁盘数据发生损坏后,利用剩下的数据和相应的奇偶校验信息去恢复被损坏的数据。

        6、RAID 10模式

        RAID10最少需要4块硬盘才能完成。把2块硬盘组成一个RAID1,然后两组RAID1组成一个RAID0。虽然RAID10方案造成了50%的磁盘浪费,但是它提供了200%的速度和单磁盘损坏的数据安全性。

        二、另外三种硬件快速硬件设置模式简介

        在收集资料时看到有的硬件设备提供快速磁盘模式设置,也很方便大家的使用,具体情况如下:

        1、Clone模式

        克隆模式,磁盘全部数据一样,以最小硬盘的为准。

        2、Large模式

        硬盘容量简单相加,将几个硬盘变成一个硬盘,容量为几个硬盘容量之和,此模式下可以获得最大的硬盘空间。

        3、Normal模式

        硬盘分别处于正常、独立的状态,可以分别独立的写入或读取资料,能使用的实际容量分别为4个硬盘的容量。如果其中一个硬盘受损,其他几个硬盘不会受影响。


         三、RAID使用简明注意事项

        ★使用前请先备份硬盘的资料,一旦进行RAID设定或是变更RAID模式,将会清除硬盘里的所有资料,以及无法恢复;

        ★建立RAID时,建议使用相同品牌、型号和容量的硬盘,以确保性能和稳定;

        ★请勿随意更换或取出硬盘,如果取出了硬盘,请记下硬盘放入两个仓位的顺序不得更改,以及请勿只插入某一块硬盘使用,以避免造成资料损坏或丢失;

        ★如果旧硬盘曾经在RAID模式下使用,请先进清除硬盘RAID信息,让硬盘回复至出厂状态,以免RAID建立失败;

        ★RAID0模式下,其中一个硬盘损坏时,其它硬盘所有资料都将丢失;

        ★RAID1模式下,如果某一块硬盘受损,可以用一块大于或等于受损硬盘容量的新硬盘替换坏硬盘然后开机即可自动恢复和修复资料以及RAID模式。此过程需要一定时间,请耐心等待

        四、细数RAID模式

        1、概念

        磁盘阵列(Redundant Arrays of Inexpensive Disks,RAID),有“价格便宜且多余的磁盘阵列”之意。原理是利用数组方式来作磁盘组,配合数据分散排列的设计,提升数据的安全性。磁盘阵列是由很多便宜、容量较小、稳定性较高、速度较慢磁盘,组合成一个大型的磁盘组,利用个别磁盘提供数据所产生加成效果提升整个磁盘系统效能。同时利用这项技术,将数据切割成许多区段,分别存放在各个硬盘上。磁盘阵列还能利用同位检查(Parity Check)的观念,在数组中任一颗硬盘故障时,仍可读出数据,在数据重构时,将数据经计算后重新置入新硬盘中。

        2、规范

        RAID技术主要包含RAID 0~RAID 50等数个规范,它们的侧重点各不相同,常见的规范有如下几种:

      

     

      RAID 0:RAID 0连续以位或字节为单位分割数据,并行读/写于多个磁盘上,因此具有很高的数据传输率,但它没有数据冗余,因此并不能算是真正的RAID结构。RAID 0只是单纯地提高性能,并没有为数据的可靠性提供保证,而且其中的一个磁盘失效将影响到所有数据。因此,RAID 0不能应用于数据安全性要求高的场合。

      

     

      RAID 1:它是通过磁盘数据镜像实现数据冗余,在成对的独立磁盘上产生互为备份的数据。当原始数据繁忙时,可直接从镜像拷贝中读取数据,因此RAID 1可以提高读取性能。RAID 1是磁盘阵列中单位成本最高的,但提供了很高的数据安全性和可用性。当一个磁盘失效时,系统可以自动切换到镜像磁盘上读写,而不需要重组失效的数据。

      

     

      RAID 0+1: 也被称为RAID 10标准,实际是将RAID 0和RAID 1标准结合的产物,在连续地以位或字节为单位分割数据并且并行读/写多个磁盘的同时,为每一块磁盘作磁盘镜像进行冗余。它的优点是同时拥有RAID 0的超凡速度和RAID 1的数据高可靠性,但是CPU占用率同样也更高,而且磁盘的利用率比较低。

      RAID 2:将数据条块化地分布于不同的硬盘上,条块单位为位或字节,并使用称为“加重平均纠错码海明码)”的编码技术来提供错误检查及恢复。这种编码技术需要多个磁盘存放检查及恢复信息,使得RAID 2技术实施更复杂,因此在商业环境中很少使用。

      RAID 3:它同RAID 2非常类似,都是将数据条块化分布于不同的硬盘上,区别在于RAID 3使用简单的奇偶校验,并用单块磁盘存放奇偶校验信息。如果一块磁盘失效,奇偶盘及其他数据盘可以重

      

     

    新产生数据;如果奇偶盘失效则不影响数据使用。RAID 3对于大量的连续数据可提供很好的传输率,但对于随机数据来说,奇偶盘会成为写操作的瓶颈。

     

      RAID 4:RAID 4同样也将数据条块化并分布于不同的磁盘上,但条块单位为块或记录。RAID 4使用一块磁盘作为奇偶校验盘,每次写操作都需要访问奇偶盘,这时奇偶校验盘会成为写操作的瓶颈,因此RAID 4在商业环境中也很少使用。

      

     

      RAID 5:RAID 5不单独指定的奇偶盘,而是在所有磁盘上交叉地存取数据及奇偶校验信息。在RAID 5上,读/写指针可同时对阵列设备进行操作,提供了更高的数据流量。RAID 5更适合于小数据块和随机读写的数据。RAID 3与RAID 5相比,最主要的区别在于RAID 3每进行一次数据传输就需涉及到所有的阵列盘;而对于RAID 5来说,大部分数据传输只对一块磁盘操作,并可进行并行操作。在RAID 5中有“写损失”,即每一次写操作将产生四个实际的读/写操作,其中两次读旧的数据及奇偶信息,两次写新的数据及奇偶信息。

      RAID 6:与RAID 5相比,RAID 6增加了第二个独立的奇偶校验信息块。两个独立的奇偶系统使用不同的算法,数据的可靠性非常高,即使两块磁盘同时失效也不会影响数据的使用。但RAID 6需要分配给奇偶校验信息更大的磁盘空间,相对于RAID 5有更大的“写损失”,因此“写性能”非常差。较差的性能和复杂的实施方式使得RAID 6很少得到实际应用。

      RAID 7:这是一种新的RAID标准,其自身带有智能化实时操作系统和用于存储管理的软件工具,可完全独立于主机运行,不占用主机CPU资源。RAID 7可以看作是一种存储计算机(Storage Computer),它与其他RAID标准有明显区别。除了以上的各种标准(如表1),我们可以如RAID 0+1那样结合多种RAID规范来构筑所需的RAID阵列,例如RAID 5+3(RAID 53)就是一种应用较为广泛的阵列形式。用户一般可以通过灵活配置磁盘阵列来获得更加符合其要求的磁盘存储系统。

      RAID 5E(RAID 5 Enhencement): RAID 5E是在RAID 5级别基础上的改进,与RAID 5类似,数据的校验信息均匀分布在各硬盘上,但是,在每个硬盘上都保留了一部分未使用的空间,这部分空间没有进行条带化,最多允许两块物理硬盘出现故障。看起来,RAID 5E和RAID 5加一块热备盘好象差不多,其实由于RAID 5E是把数据分布在所有的硬盘上,性能会比RAID5 加一块热备盘要好。当一块硬盘出现故障时,有故障硬盘上的数据会被压缩到其它硬盘上未使用的空间,逻辑盘保持RAID 5级别。

      RAID 5EE: 与RAID 5E相比,RAID 5EE的数据分布更有效率,每个硬盘的一部分空间被用作分布的热备盘,它们是阵列的一部分,当阵列中一个物理硬盘出现故障时,数据重建的速度会更快。

      RAID 50:RAID50是RAID5与RAID0的结合。此配置在RAID5的子磁盘组的每个磁盘上进行包括奇偶信息在内的数据的剥离。每个RAID5子磁盘组要求三个硬盘。RAID50具备更高的容错能力,因为它允许某个组内有一个磁盘出现故障,而不会造成数据丢失。而且因为奇偶位分部于RAID5子磁盘组上,故重建速度有很大提高。优势:更高的容错能力,具备更快数据读取速率的潜力。需要注意的是:磁盘故障会影响吞吐量。故障后重建信息的时间比镜像配置情况下要长。

        3、优点

        提高传输速率。RAID通过在多个磁盘上同时存储和读取数据来大幅提高存储系统的数据吞吐量(Throughput)。在RAID中,可以让很多磁盘驱动器同时传输数据,而这些磁盘驱动器在逻辑上又是一个磁盘驱动器,所以使用RAID可以达到单个磁盘驱动器几倍、几十倍甚至上百倍的速率。这也是RAID最初想要解决的问题。因为当时CPU的速度增长很快,而磁盘驱动器数据传输速率无法大幅提高,所以需要有一种方案解决二者之间的矛盾。RAID最后成功了。

      通过数据校验提供容错功能。普通磁盘驱动器无法提供容错功能,如果不包括写在磁盘上的CRC(循环冗余校验)码的话。RAID容错是建立在每个磁盘驱动器的硬件容错功能之上的,所以它提供更高的安全性。在很多RAID模式中都有较为完备的相互校验/恢复的措施,甚至是直接相互的镜像备份,从而大大提高了RAID系统的容错度,提高了系统的稳定冗余性。

        4、实现

        磁盘阵列有两种方式可以实现,那就是“软件阵列”与“硬件阵列”。

      软件阵列是指通过网络操作系统自身提供的磁盘管理功能将连接的普通SCSI卡上的多块硬盘配置成逻辑盘,组成阵列。软件阵列可以提供数据冗余功能,但是磁盘子系统的性能会有所降低,有的降低幅度还比较大,达30%左右。

      硬件阵列是使用专门的磁盘阵列卡来实现的。硬件阵列能够提供在线扩容、动态修改阵列级别、自动数据恢复、驱动器漫游、超高速缓冲等功能。它能提供性能、数据保护、可靠性、可用性和可管理性的解决方案。阵列卡专用的处理单元来进行操作,它的性能要远远高于常规非阵列硬盘,并且更安全更稳定。

      磁盘阵列其实也分为软阵列 (Software Raid)和硬阵列 (Hardware Raid) 两种. 软阵列即通过软件程序并由计算机的 CPU提供运行能力所成. 由于软件程式不是一个完整系统故只能提供最基本的 RAID容错功能. 其他如热备用硬盘的设置, 远程管理等功能均一一欠奉. 硬阵列是由独立操作的硬件提供整个磁盘阵列的控制和计算功能. 不依靠系统的CPU资源.

      由于硬阵列是一个完整的系统, 所有需要的功能均可以做进去. 所以硬阵列所提供的功能和性能均比软阵列好. 而且, 如果你想把系统也做到磁盘阵列中, 硬阵列是唯一的选择. 故我们可以看市场上 RAID 5 级的磁盘阵列均为硬阵列. 软 阵列只适用于 Raid 0 和 Raid 1. 对于我们做镜像用的镜像塔, 肯定不会用 Raid 0或 Raid 1。作为高性能的存储系统,已经得到了越来越广泛的应用。RAID的级别从RAID概念的提出到现在,已经发展了六个级别,其级别分别是0、1、2、3、4、5等。但是最常用的是0、1、3、5四个级别。

        五、个人用户该选那种RAID模式

        首先要分析清楚,我们需要存储的文件有什么样的属性。这其中需要大量存储的和占用存储量大的文件是两回事儿。

        从使用角度粗略分,个人需要存储的文件大致有文本文件、照片录像、影音文件、应用程序等。

        1、文本文件:大量长期存放,阶段性更新,但其占用空间小,安全性要求个别较高,大部分一般;

        2、照片录像:大量长期存放,永久性记录,占用空间大,安全性要求高,一旦损失很难弥补;

        3、影音文件:一部分大量长期存放,一部分大量短期存放,阶段性更新,占用空间大,安全性要求一般,即便损失了,也可以再从网络上下载恢复;

        4、应用程序:这其中包括一些软件和硬件的驱动等,对于软件,目前基本可以从网络上获得,驱动程序有时需要预先备份,安装设备时随时可用,属于量少但要长期存放的,阶段性更新,安全性要求一般。

        看看自己需要对哪种类型的文件进行存储,再选择自己需要的RAID模式即可。

        本人的照片和私人录影资料较多,平时喜欢收集APE等无损格式的音乐文件,对于个人来说这都是至宝,不可有所损失,再有就是一些硬件的驱动程序,相对比较重要,另外会编辑少量的个人文件,阶段性比较重要,最后是影片,看完也就删除了,不太重要。而照片录像和无损音乐占用的空间又是巨大的,安全性要求又很高,权衡后,在节约资金确保安全的前提下,准备购置五块大容量硬盘,组成NAS存储服务器,选择RAID5模式。

        顺便说,购置五快硬盘的原因还有一个,就是我使用的是老机箱改造NAS服务器,市面上有3转5的硬盘笼子可以简单将原有的3个光驱位变成5块硬盘的存储位,考虑到家用存储8T的容量已经足够了,10T基本上可以无忧了,所以选择了5块硬盘,每块2T容量。当然组成RAOD5后会少于10T,那也足够了!

        NAS的好处很多,这里就不在赘述,有兴趣的朋友建议深入了解。它既可以完成集中存储还可以完成诸如自动BT下载,网络打印机,苹果媒体服务器等众多私有云功能,是很好的家庭网络应用解决方案。

    展开全文
  • 为满足用户不同的行业需求,同时提高货架生产企业自身产品的市场竞争力,许多企业在开发多样化产品上下功夫,加大科技投入,积极研发具有冷冻冷藏、自动拣选等功能的货架。由此,货架不再是单纯的“储物”架子,现在...

      为满足用户不同的行业需求,同时提高货架生产企业自身产品的市场竞争力,许多企业在开发多样化产品上下功夫,加大科技投入,积极研发具有冷冻冷藏、自动拣选等功能的货架。由此,货架不再是单纯的“储物”架子,现在已渐渐演变成为一个集多样和复杂功能于一体的系统。随着土地资源越来越昂贵,为了降低成本,各企业都在想尽办法提高仓库利用率,因此成就了密集货架的广泛需求,面对众多类型的密集货架,我们该如何去选择呢?
      一般存取性与储存密度是相对的。为了仓库得到较高的储存密度,则必须相对牺牲物品的存取性。最好的当然是往自动化立体仓库或穿梭式货架系统上发展,存取性与储存密度俱佳,但相对投资和维护成本较为昂贵。因此选用何种类型的仓储设备,可说是各种因素的折衷,也是一种策略的应用。目前货架行业的密集货架产品大致有以下几种:

      1、贯通式货架:适用于品种少,进出库数量大、对“先进先出”要求不高的产品例如:牛奶、矿泉水、饮料、洗化用品、烟草等等行业。

      贯通货架的优点是:成本最低的密集存储方式;
      贯通货架的缺点是:货架安全性不高,叉车需要进入货架内部通道操作,可视性较差。

      2、压入式货架:针对贯通式货架的缺点,从而产生了压入式货架。这种货架的空间利用率与贯通货架相当。适用于品种较少,进出库数量较大的产品例如化工产品、机械零件等

      压入式货架的优点:叉车不需要进入货架内部操作,安全性高,存储量大;
      压入式货架的缺点:一次采购成本比贯通货架高,托盘上的货物需要包扎结实以防止托盘运动过程中的散落。

      3、重力式货架:这种货架的空间利用率远远大于上述两种货架,且完全能够严格满足“先进先出”的原则,但是考虑到成本居高不下,目前国内应用不多。即使有工厂选用,采购量也不大。

      重力式货架的优点:空间利用率高、操作安全、完全满足“先进先出”的原则;

      重力式货架的缺点:成本太高,大约是普通贯通货架的4倍~7倍之间。

      4、穿梭车货架:使用专门的穿梭小车与叉车配合,货架部分与贯通货架接近,空间利用率与重力式货架相当,操作安全可靠,在特定通道内只能先进后出,是目前比较热门的货架

      穿梭车货架的优点:空间利用率高、操作安全;

      穿梭车货架的缺点:需要单独采购穿梭小车(相当于1台电瓶叉车的价格)。
      

     

    来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29775974/viewspace-1659628/,如需转载,请注明出处,否则将追究法律责任。

    转载于:http://blog.itpub.net/29775974/viewspace-1659628/

    展开全文
  • 相较于使用基于方法(function based)的视图,我们更加倾向使用基于类(class based)的视图。接下来,你将看到这是一个强大的模式,是我们能够重用公共的功能,并且,帮我们减少重复的造轮子。...

    相较于使用基于方法(function based)的视图,我们更加倾向使用基于类(class based)的视图。接下来,你将看到这是一个强大的模式,是我们能够重用公共的功能,并且,帮我们减少重复的造轮子。

    我们现在开始了。首先,重写根视图(root view),变成基于类的视图。所涉及的,只是对 views.py 文件的一点重构。

    一、使用基于 APIView 类的视图

    from testapps.models import Testapp
    from testapps.serializers import TestappSerializer
    from django.http import Http404
    from rest_framework.views import APIView
    from rest_framework.response import Response
    from rest_framework import status
    
    class TestappList(APIView):
    """
    列出所有代码片段(testapps), 或者新建一个代码片段(testapp).
    """
        def get(self, request, format=None):
            testapps = Testapp.objects.all()
            serializer = TestappSerializer(testapps, many=True)
            return Response(serializer.data)
    
        def post(self, request, format=None):
            serializer = TestappSerializer(data=request.data)
            if serializer.is_valid():
                serializer.save()
                return Response(serializer.data, status=status.HTTP_201_CREATED)
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

    至此为止,一切顺利。看起来,跟基于方法的差别不大,但我们将各个 HTTP 请求方法之间,做了更好的分离。接着,我们将同样的更改我们,处理片段详细的视图,继续我们的  views.py  文件:

    class TestappDetail(APIView):
    
    """
    读取, 更新 or 删除一个代码片段(testapp)实例(instance).
    """
        def get_object(self, pk):
            try:
                return Testapp.objects.get(pk=pk)
            except Testapp.DoesNotExist:
                raise Http404
    
        def get(self, request, pk, format=None):
            testapp = self.get_object(pk)
            serializer = TestappSerializer(testapp)
            return Response(serializer.data)
    
        def put(self, request, pk, format=None):
            testapp = self.get_object(pk)
            serializer = TestappSerializer(testapp, data=request.data)
            if serializer.is_valid():
                serializer.save()
                return Response(serializer.data)
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
    
        def delete(self, request, pk, format=None):
            testapp = self.get_object(pk)
            testapp.delete()
            return Response(status=status.HTTP_204_NO_CONTENT)

    看起来不错。但还是跟基于方法的视图,差别不多。

    我们也需要重构 urls.py文件,因为我们现在使用的是基于类的视图。

    from django.conf.urls import url
    from rest_framework.urlpatterns import format_suffix_patterns
    from testapp import views
    
    urlpatterns = [
        url(r'^testapp/$', views.TestappList.as_view()),
        url(r'^testapp/(?P<pk>[0-9]+)/$', views.TestappDetail.as_view()),
    ]
    
    urlpatterns = format_suffix_patterns(urlpatterns)

    好,搞定。如果你跑起开发者服务器,应该跟之前的效果是一样的。

    二、使用 Mixins 类的视图

    使用类视图的一大好处是,我们可以很容易地,组成可重复使用的行为。

    目前为止,我们所用的增删改查操作,在我们创建的,任何支持模型的视图里,都没有太大区别。这些通用的行为,在 REST framework的 Mixin类中,都已经实现了。

    让我们看看,使用混合类,如何组建视图。下面同样是我们的 views.py 模块:

    from testapp.models import Testapp
    from testapp.serializers import Testapperializer
    from rest_framework import mixins
    from rest_framework import generics
    
    class TestappList(mixins.ListModelMixin,
                      mixins.CreateModelMixin,
                      generics.GenericAPIView):
        queryset = Testapp.objects.all()
        serializer_class = Testapperializer
    
        def get(self, request, *args, **kwargs):
            return self.list(request, *args, **kwargs)
    
        def post(self, request, *args, **kwargs):
            return self.create(request, *args, **kwargs)

    我们会花一些时间来审查一下,这里发生的事情。我们使用 GenericAPIView 创建了我们的视图,并且加入了 ListModelMixin 和 CreateModelMixin 。

    基本类提供了核心的功能,Mixin 类提供了 .list() 和 .create() 行为。然后,我们显式地在 get 和 post 方法里面,放入对应的行动。非常简单,但目前够用。

    class TestappDetail(mixins.RetrieveModelMixin,
                        mixins.UpdateModelMixin,
                        mixins.DestroyModelMixin,
                        generics.GenericAPIView):
        queryset = Testapp.objects.all()
        serializer_class = TestappSerializer
    
        def get(self, request, *args, **kwargs):
            return self.retrieve(request, *args, **kwargs)
    
        def put(self, request, *args, **kwargs):
            return self.update(request, *args, **kwargs)
    
        def delete(self, request, *args, **kwargs):
            return self.destroy(request, *args, **kwargs)

    非常的类似。我们使用了 GenericAPIView 类提供了核心功能,而 Mixin 类提供了 .retrieve() ,.update() 和 .destroy() 行为。

    三、使用 Generic 类的视图

    使用混 Mixin 类重新视图,相比之前,我们减少了一些代码,但我们还可以更进一步。REST framework 提供了一套已经实现了 Mixin 类的 Generic 视图,我们可以使我们的 views.py 模块,更加瘦身!

    from testapps.models import Testapp
    from testapps.serializers import TestappSerializer
    from rest_framework import generics
    
    
    class TestappList(generics.ListCreateAPIView):
        queryset = Testapp.objects.all()
        serializer_class = TestappSerializer
    
    
    class TestappDetail(generics.RetrieveUpdateDestroyAPIView):
        queryset = Testapp.objects.all()
        serializer_class = TestappSerializer

    这下够简洁了。代码看起来像是很厉害的,干净的,地道的 Django。

    转载于:https://www.cnblogs.com/reboot51/p/8335120.html

    展开全文
  • 字符数组: char a[1000]; 第一种:gets(a) ; // 可接受空格 gets()函数将接收输入的整个字符串 直到遇到换行为止 注明:这个在vjuge平台上使用不了,建议使用cin.getline(s,sizeof(s)); 注意:使用gets时,需要...
  • 磁盘阵列RAID原理、种类及性能优缺点对比 磁盘阵列(Redundant Arrays of Independent Disks,RAID) 1. 存储的数据一定分片; 2. 分基于软件的软RAID(如mdadm)和基于硬件的硬RAID(如RAID卡); 3. RAID卡...
  • 虽然mysql支持种类繁多的存储引擎,但是常用的就那么几种。这篇文章主要是对其进行一个总结和对比。一、引言在mysql5之后,支持的存储引擎有十几个,但是常用的就那么几种,而且默认支持的也是InnoDB,既然要进行一...
  • 磁盘阵列RAID原理、种类及性能优缺点对比 原文:http://www.cnblogs.com/chuncn/p/6008173.html 磁盘阵列(Redundant Arrays of Independent Disks,RAID) 1. 存储的数据一定分片; 2. 分基于软件的软RAID...
  • 不同种类电容的特性对比 容量vs温度 温度特性良好的电容器有导电性高分子铝电解电容器(高分子AI)、薄膜电容器(Film)、温度补偿用独石陶瓷电容器(MLCC)。导电性高分子钽电容器(高分子Ta)、高介电常数独石陶瓷...
  • # -*- coding:utf-8 -*- list_a = [1, 2, 3, 4, 4, 5, 7, 8, 9, 0] list_b = [1, 3, 5, 7, 7, 9, 10, 11, 12, 13] # 求两个集合都出现的元素(利用set) intersection_list = list(set(list_a).intersection(set...
  • MAT之ELM:ELM实现鸢尾花(iris数据集)种类测试集预测识别正确率(better)结果对比 目录 输出结果 实现代码 输出结果 实现代码 load iris_data.mat P_train = []; T_train = []; P_test = []; ...
  • 一、两个数据表进行连接合并的七种情况 使用韦恩图分析两个集合的合并(即Power Query中对表的合并查询),可得出有7种情况。(动手数一下,数不出第8种情况的了) 1、左外部链接:匹配A、B两个数据集,仅返回A中...
  • 一、RAID模式优缺点的简要介绍 目前被运用较多的RAID模式其优缺点大致是这样的: 1、RAID0模式 优点:在RAID 0状态下,存储数据被分割成两部分,分别存储在两块硬盘上,此时移动硬盘的理论存储速度是单块硬盘的2...
  • MAT之GRNN/PNN:基于GRNN、PNN两神经网络实现并比较鸢尾花(iris数据集)种类识别正确率、各个模型运行时间对比 目录 输出结果 实现代码 输出结果 实现代码 loadiris_data.mat P_train = []; T_...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,245
精华内容 498
关键字:

对比种类