css打印分页

一、打印方法:

一般打印web使用的是window.print()方法,当然也可使用vue-print

二、参数介绍:

@page中一般设置打印的页头页脚打印方向等,示例:

size:打印信息,打印纸张类型(A4)亦或控制打印方向,portrait: 纵向打印地, landscape: 横向。

@page{

margin: 4mm 14mm 4mm 4mm;

size:A4 landscape;

}

@media print 设置css中可以查看打印样式,示例:

media print {

}

可以将打印和页面的部分分离,需要注意的是需要打印的部分用“包含css样式再赋予函数,注意不是引号。然后抛出引入展示页面中,放在data的return {}下就行了。

三、分页:

分页的话使用的css样式一般是page-break-before与page-break-after这两个,对应的是打印前分页与打印后分页。

page-break-before 在元素前分页

page-break-after 在元素后分页

page-break-inside 元素内部分页

打印属性可以控制分页方向,可以设定4种设定值:auto、always、left和right。其中Auto是默认值,只有在有需要时,才需设定分页符号,以page-break-after示例:

page-break-after:auto; 默认值

page-break-after:always; 新分页在元素下方

page-break-after:left; 新分页在元素下方

page-break-after:right; 新分页在元素下方

注意:

1.分页的元素必须是个可展示的块级元素,为求保险最好加上display: block;

2.元素内分页我试过,不怎么管用,所有还是用page-break-after比较好,要循环中分页的建议加个判断,然后再设置分页,再添加新的table元素,在该table元素中复制这个循环同样加上判断展示分页后的内容

3.建议分页元素放在两个table元素之间,分页后的table元素设置margin-top,如果不起左右就在元素属性style上设置
————————————————
版权声明:本文为CSDN博主「qq_35491739」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_35491739/article/details/126279510

mysql计算正态分布、差异系数、离均差、离均差率

1、数据准备  建表 

drop table if exists score;
create table score(
    id int not null primary key auto_increment,
    score decimal(10,2) not null
);

  插入数据

insert into score (score) values (89.4);
insert into score (score) values (82.5);
insert into score (score) values (65);
insert into score (score) values (98);
insert into score (score) values (92);
insert into score (score) values (34);
insert into score (score) values (59);
insert into score (score) values (83);
insert into score (score) values (88);
insert into score (score) values (63);
insert into score (score) values (100);
insert into score (score) values (96);
insert into score (score) values (68);
insert into score (score) values (56);

注意:计算标准差最少需要两个值

2、计算正态分布

计算方法是:平均分-标准差(四个值:μ-2σ,μ-σ,μ+σ,μ+2σ)

select round(score_avg - score_bzc * 2, 2) zt1,
       round(score_avg - score_bzc, 2)     zt2,
       round(score_avg + score_bzc, 2)     zt3,
       round(score_avg + score_bzc * 2, 2) zt4
from (select avg(score) score_avg, stddev_samp(score) score_bzc
      from score
      where id in (1, 2)) as a;

3、计算差异系数

 计算方法是:标准差/平均分(σ/μ)

select round(score_bzc/score_avg,2) cyxs
from (select avg(score) score_avg, stddev_samp(score) score_bzc
      from score
      where id in (1,2)) as a;

4、计算离均差

计算方法是:单个值-平均值(x-μ)

select round(score - (avg(score) over ()), 2) ljc
from score
where id in (1, 2);

5、计算离均差率

计算方法是:离均差/平均值((x-μ)/μ)

select round((score - (avg(score) over ())) / (avg(score) over ()), 2) ljcl
from score
where id in (1, 2);

正则提取要选择题的选项

如下题匹配选项:

(1) 设集合 $A=[-1,2], B=\left{y \mid y=x^{2}, x \in A\right}$, 则 $A\cap B=$
A. $[1,4]$
B. $[1,2]$
C. $[-1,0]$
D. $[0,2]$

直接上代码:

    function getOption(str,from,to)
    {
        var r = 'var reg = /[\(]*'+from+'[:|:|、|.]{1}(.*?)[\s]?'+ to +'/';
        // console.log(r);
        eval(r);
        var arr = str.match(reg);
        console.log(arr);
        return arr[1].replace('<br/>','').replace('</p><p style=\"white-space: normal;\">','');
        //return str.match(reg)[1];
    }

格式化数据:

    function formatContent(content)
    {
        content = content.replace('\(A\)','A.').replace('\(B\)','B.').replace('\(C\)','C.').replace('\(D\)','D.').replace('\(E\)','E.').replace('\(F\)','F.'); 
        content = content.replace('<br/>','');
        content = content.replace('<br>','');
        content = content.replace('</p><p>'); 
        content = content.replace('<x','\\lt x');

        return content;    
    }

设置选项:

    function setChoiceItem()
    {
        var list =['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q'];
        var ue = UE.geEditor('question-content');
        var content = formatContent(ue.getContent());
        console.log(content);
        var str = content;

        //console.log(getOption(str,'A','B'));
        //console.log(getOption(str,'B','C'));
        //console.log(getOption(str,'C','D'));
        //console.log(getOption(str,'D','$'));

        //$('p.optionContent:eq(0)').html(getOption(content,'A','B'));
        //$('p.optionContent:eq(1)').html(getOption(content,'B','C'));
        //$('p.optionContent:eq(2)').html(getOption(content,'C','D'));
        //$('p.optionContent:eq(3)').html(getOption(content,'D','$'));
        
        var len = $('p.optionContent').length; 

        $('p.optionContent').each(function(index,e){

            console.log(list[index]);console.log(len);

            var start = list[index];
            var end = list[index+1];
            if(index == len-1) 
            {
                end='$';
            }

            $(this).html(getOption(content,start,end));

        });

    }

正则表达式“正向匹配和反向匹配”的妙用

相信大家在看正则表达式语法的时候都会遇到下面几种:正向肯定,正向否定,反向肯定,反向否定

1、(?=pattern)

正向肯定预查,在任何匹配pattern的字符串开始处匹配查找字符串。

这是一个非获取匹配,该匹配不需要获取供以后使用。

例如,“Windows(?=95|98|NT|2000)”能匹配“Windows2000”中的“Windows”,

但不能匹配“Windows3.1”中的“Windows”。

预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,

而不是从包含预查的字符之后开始。

2、(?!pattern)

正向否定预查,在任何不匹配pattern的字符串开始处匹配查找字符串。

这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。

例如“Windows(?!95|98|NT|2000)”能匹配“Windows3.1”中的“Windows”,

但不能匹配“Windows2000”中的“Windows”。

3、(?<=pattern)

反向肯定预查,与正向肯定预查类似,只是方向相反。

例如,“(?<=95|98|NT|2000)Windows”能匹配“2000Windows”中的“Windows”,

但不能匹配“3.1Windows”中的“Windows”。

4、(?<!pattern)

反向否定预查,与正向否定预查类似,只是方向相反。

例如“(?<!95|98|NT|2000)Windows”能匹配“3.1Windows”中的“Windows”,

但不能匹配“2000Windows”中的“Windows”。

我第一次看的时候就觉得很难理解,读了两遍好不容易理解了,但是一直用不上,直到工作需要……………

str = “111/;hkakdhaldladhl;gddhkshls;hhhh”
用 ; 切割字符串,要求切割结果是111/;hkakdhaldladhl gddhkshls hhhh,也就是第一个;前面有/,所以第一个;不分割,只分割后面的;

这其实就用到了反向否定,将python里面的split函数和正则表达式完美结合在一起,大家根据我的例子再去理解正(反)向否(肯)定匹配,肯定就更清晰了
python代码实现:

import re

str = “111/;hkakdhaldladhl;gddhkshls;hhhh”
str_list = re.split(r”(?<!\/);”,str)
print(str_list)
结果:

注:?<! 是反向否定的意思, \/ 是对 / 做了转义

为了能记得住,我总结了下面的规律,供参考~~

“肯定” 就是出现在?<! ?<= ?! ?= 后面那些字符,我们要匹配的字符串带这个才去匹配

“否定”就是出现在?<! ?<= ?! ?= 后面那些字符,我们要匹配的字符串不带这个才去匹配

“正反向”就是例子里面windows在 ?<! ?<= ?! ?= 以及后面字符的前面还是后面,windows在后是反向,在前是正向

记起来就是,四种都要带? 肯定的是= 否定的是! 如果是反向就加上<

Django根据已有的数据库来生成模型

日常开发中,我们有时会碰到数据库已经存在,而需要我们去生成模型的情况。这种情况下,我们需要:

Django中配置好数据库,确保连接得上这个已经存在的数据库
在cmd中运行命令,模型会生成在同一个文件中

 python manage.py inspectdb > models.py


修改模型
3.1 修改模型名,根据需求修改模型的名称
3.2 将不同的表放进其所属的app中
3.3 处理好表之间的外键关系(主要针对跨app的表,如果外键在同一个模型文件中,则可以跳过该步骤),在外键前加上app_name
3.4 让Django能够管理该模型并进行迁移:将Meta下的managed = False删除
3.5 当有多对多关系的表时,删除模型中的中间表,使用ManyToManyField来实现多对多,注意要设置中间表的名称让其与数据库中的中间表名一致
3.6 切记不要修改模型中的表名称,与数据库不一致的话会导致找不到表的错误
运行 python manage.py makemigrations
运行 python manage.py migrate –fake-initial
其中,在修改模型的时候,重点是需要分析好表与表之间的关系,只要能够弄清楚表与表之间的关系,那么修改模型会轻松很多

Django学习笔记:KeyError

处理Python关于Dict的错误KeyError的办法挺多,不过就记下了2个:

方法一:使用setdefault()设置默认值,如

data.setdefault('error', 0)

方法二:导入collections,使用defaultdict方法

data = collections.defaultdict(list, data)

YII2 where查询条件整理

本文转自:https://www.yiichina.com/tutorial/1405

官方文档:http://www.yiichina.com/doc/guide/2.0/db-query-builder

文章涉及where、 addParams 、filterWhere 、andWhere、orWhere、 andFilterWhere()、 orFilterWhere()、andFilterCompare()
但是格式是一样的

字符串格式,例如:'status=1'
哈希格式,例如: ['status' => 1, 'type' => 2]
操作符格式,例如:['like', 'name', 'test']

字符串和哈希格式很好理解,我们来看看操作符格式,因为操作符格式可以组成相对复杂的查询语句
最简单的就是官方给的例子

$status = 10;
$search = 'yii';

$query->where(['status' => $status]);

if (!empty($search)) {
    $query->andWhere(['like', 'title', $search]);
}
生成的语句就是
... WHERE (`status` = 10) AND (`title` LIKE '%yii%')

操作符格式

[操作符, 操作数1, 操作数2, ...]
0cb4d39e-418f-4183-a900-8a4ab5b1aadf.png

第一个参数是操作符
操作符包括and、or、 like、in、 between等
第二个第三个都是操作数

第一种最简单的就是上面提到的例子
 andWhere(['like', 'title','搜索的标题']);
生成的语句
... WHERE (`status` = 10) AND (`title` LIKE '%yii%')
第二种
addWhere(['and', 'id=1', 'name=2']);
生成的语句
... WHERE id=1 AND name=2
第三种
addWhere(['and', 'type=1', ['or', 'id=1', 'id=2']]);
生成的语句
... WHERE type=1 AND (id=1 OR id=2);
第四种
->andWhere(['or like','name',['哈哈','苦苦']]);
生成的语句
 WHERE `name` LIKE '%哈哈%' OR `name` LIKE '%苦苦%';
 第五种
 addWhere(['or',['like','name','哈哈'],['like','title','苦苦']]);//操作符格式的嵌套
 生成的语句
... WHERE (`status`=1) AND ((`name` LIKE '%哈哈%') OR (`title` LIKE '%苦苦%'))

$query->andWhere(new Expression(‘FIND_IN_SET(‘1,size’)’));+
生成的语句
… WHERE id=1 AND FIND_IN_SET(1, size)
//size的值:1,2,3,4,5