




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
成果名称:《学生管理系统Python》 一、实践目的python作为一门高级编程语言,它的诞生虽然很偶然,但是它得到程序员的喜爱却是必然之路。对于Python的定位是“优雅”、“明确”、“简单”,所以Python程序看上去总是简单易懂,初学者学Python,不但入门容易,而且将来深入下去,可以编写那些非常非常复杂的程序。现在的人工智能非常的火爆,其工般我们用爬虫爬到了大量的数据之后,我们需要处理数据用来分析,不然爬虫白爬了,我们最终的目的就是分析数据,在这方面关于数据分析的库也是非常的丰富的,各种图形分析图等都可以做出来。也是非常的方便,其中诸如Seaborn这样的可视化库,能够仅仅使用一两行就对数据进行绘图,而利用Pandas和numpy、scipy则可以简单地对大量数据进行筛选、回归等计算。而后续复杂计算中,对接机器学习相关算法,或者提供Web访问接口,或是实现远程调用接口,都非常简单。二、实践内容优点Python的定位是“优雅”、“明确”、“简单”,所以Python程序看上去总是简单易懂,初学者学Python,不但入门容易,而且将来深入下去,可以编写那些非常非常复杂的程序。开发效率非常高,Python有非常强大的第三方库,基本上你想通过计算机实现任何功能,Python官方库里都有相应的模块进行支持,直接下载调用后,在基础库的基础上再进行开发,大大降低开发周期,避免重复造轮子。高级语言————当你用Python语言编写程序的时候,你无需考虑诸如如何管理你的程序使用的内存一类的底层细节可移植性————由于它的开源本质,Python已经被移植在许多平台上(经过改动使它能够工作在不同平台上)。如果你小心地避免使用依赖于系统的特性,那么你的所有Python程序无需修改就几乎可以在市场上所有的系统平台上运行可扩展性————如果你需要你的一段关键代码运行得更快或者希望某些算法不公开,你可以把你的部分程序用C或C++编写,然后在你的Python程序中使用它们。可嵌入性————你可以把Python嵌入你的C/C++程序,从而向你的程序用户提供脚本功能。缺点:速度慢,Python的运行速度相比C语言确实慢很多,跟JAVA相比也要慢一些,因此这也是很多所谓的大牛不屑于使用Python的主要原因,但其实这里所指的运行速度慢在大多数情况下用户是无法直接感知到的,必须借助测试工具才能体现出来,比如你用C运一个程序花了0.1s,用Python是0.01s,这样C语言直接比Python快了10s,算是非常夸张了,但是你是无法直接通过肉眼感知的,因为一个正常人所能感知的时间最小单位是0.15-0.4s左右,哈哈。其实在大多数情况下Python已经完全可以满足你对程序速度的要求,除非你要写对速度要求极高的搜索引擎等,这种情况下,当然还是建议你用C去实现的。代码不能加密,因为PYTHON是解释性语言,它的源码都是以名文形式存放的,不过我不认为这算是一个缺点,如果你的项目要求源代码必须是加密的,那你一开始就不应该用Python来去实现。线程不能利用多CPU问题,这是Python被人诟病最多的一个缺点,GIL即全局解释器锁(GlobalInterpreterLock),是计算机程序设计语言解释器用于同步线程的工具,使得任何时刻仅有一个线程在执行,Python的线程是操作系统的原生线程。在Linux上为pthread,在Windows上为Winthread,完全由操作系统调度线程的执行。一个python解释器进程内有一条主线程,以及多条用户程序的执行线程。即使在多核CPU平台上,由于GIL的存在,所以禁止多线程的并行执行。关于这个问题的折衷解决方法,我们在以后线程和进程章节里再进行详细探讨。(一)代码格式强制缩进!Python开发者有意让违反了缩进规则的程序不能通过编译,以此来强制程序员养成良好的编程习惯。并且Python语言利用缩进表示语句块的开始和退出(Off-side规则),而非使用花括号或者某种关键字。增加缩进表示语句块的开始,而减少缩进则表示语句块的退出。缩进成为了语法的一部分。根据PEP的规定,必须使用4个空格来表示每级缩进。(二)关键字(三)基本语法弱类型变量必须先赋值再使用保留字是Python语言中已经被赋予特定意义的一些单词,开发程序时,不可以把这些保留字作为变量,函数,类,模块和其他对象的名称来使用。标识符:可以理解为一个名字,它主要用来标识变量,函数,类,模块和其他对象名称。由字母,下划线和数字组成,并且第一个字符不能是数字可以使用的标识符字符有:a-z,A-Z,0-9,“_”python函数与c语言相似函数(function)即通过将一段有规律的,重复的代码定义为函数,来达到一次编写多次调用的目的。使用def关键字来实现语法:deffunctionname([parameterlist]): [‘’’comments’’’] [functionbody]
parameterlist:参数列表,多个参数之间用逗号隔开‘’’comments’’’:表示函数指定注释,如果写了注释,再调用的的时候就会出现以帮助用户。functionbody:用于指定函数体,即函数被调用后,要执行的功能代码,如果有返回值,可以使用return语句返回。deffilterchar(string):
"""
功能:过滤危险字符,并过滤后的结果输出
about:要过滤的字符串
没有返回值
"""
importre
pattern=r'(黑客)|(抓包)|(监听)|(Trojan)'
sub=re.sub(pattern,'@_@',string)
print(sub)about='我是一个程序员,喜欢看黑客方面的书籍,想研究一下Trojan'
filterchar(about)pass语句pass语句表示空语句,它不做任何事情,一般起到占位作用。python3中可以在使用表达式的地方使用...来表示省略代码,由于省略号自身什么都不做,因此可以表示pass的代替参数传递形参,实参,值传递,引用传递位置参数位置参数也称为必备参数,必须按照正确的顺序传到函数中。即调用时的数量和位置必须和定义时是一样的,少参数和错误的位置都回使程序出错。关键字参数关键字参数是指使用形参的名字来确定输入的参数值。通过该方式指定实参时,不再需要与形参的位置完全一致,只要将参数名写正确即可为参数设置默认值调用函数时,如果没有指定某个参数将抛出异常,即在定义函数时,直接指定形式参数的默认值,当没有传入参数时则直接使用定义函数时,设置的默认值。语法:deffunctionname(....,[parameter1=defalutvalue1]): [functionbody]注意在定义函数时,指定默认的形参必须在所有参数的最后,否则将参数语法错误。每个函数都是一个对象注意:使用可变对象作为参数的默认值时,多次调用可能回导致意料之外的情况发生可变参数可变参数可称为不定长参数,即传入函数中的时间参数可以是0个,1个,2个到任意个。定义可变参数时,主要有两种形式:第一种:*parameter第二种:**parameter
返回值可以在函数体内使用return语句位函数指定返回值,该返回值可以时任意类型,并且无论return语句出现在函数的什么位置,只要得到执行,就会直接结束函数的执行。return语句的语法格式:return[value]如果返回一个值,那么,在调用函数的表达式会得到一个值,如果返回的是多个值,那么在调用函数的返回值会得到一个元组。如果一个函数中没有return,那么整个函数将返回None,即返回一个空值。返回值可以在函数体内使用return语句位函数指定返回值,该返回值可以时任意类型,并且无论return语句出现在函数的什么位置,只要得到执行,就会直接结束函数的执行。return语句的语法格式:return[value]如果返回一个值,那么,在调用函数的表达式会得到一个值,如果返回的是多个值,那么在调用函数的返回值会得到一个元组。如果一个函数中没有return,那么整个函数将返回None,即返回一个空值。(四)初识CSS什么是CSS?CSS(CascadingStyleSheet)级联样式表表现HTML或XHTML文件样式的计算机语言包括对字体、颜色、边距、高度、宽度、背景图片、网页定位等设定CSS的基本语法结构语法: 选择器{ 声明1; 声明2; } 声明 属性:值在HTML中引入CSS样式的几种方式行内样式使用style属性引入CSS样式标签style=“属性1:值;属性2:值;”></标签>内部样式表在<head>标签中引入<style>标签写CSS样式表<styletype=“text/css”> 选择器{声明;}</style>外部样式表写.css样式表文件,通过链接式或者导入式引入CSS样式表外部样式表分为两种方式: 链接式在<head>标签中使用<link>标签 <linkhref="style.css"rel="stylesheet"type="text/css"/> 导入式在<head>标签中使用<style>标签并在其中用@import<styletype="text/css"> @importurl("style.css");</style>区别:link是将css布局文件先加载如网页文件中,所以这时无论网速再慢,最终实现的网页效果都是一样的。而@import则是先将网页文件加载,再加载布局文件,这时候如果网速过慢的话,则会先出现没有布局的网页效果,就会显得很难看。CSS的基本选择器,语法规则在内部样式表和外部样式表我们如何找到页面中的要修饰的元素呢?font-size 字号大小font-family 字体样式font-weight100-900 字体粗细font-style 字体风格(斜体)统一设置,必须按照下的顺序:选择器{font:font-stylefont-weightfont-size/line-heightfont-family;}color 文本颜色line-height 行间距text-align 水平对齐方式text-indent 首行缩进(只能让块元素进行缩进)text-decoration 文本的装饰 none默认。定义标准的文本。 underline定义文本下的一条线。 overline定义文本上的一条线。 line-through定义穿过文本下的一条线。伪类选择器用于向某些选择器添加特殊的效果。比如给链接添加特殊效果为了和我们刚才学的类选择器相区别,类选择器是一个点比如.demo{}而我们的伪类用2个点就是冒号比如:link{}:link/*未访问的链接*/:visited/*已访问的链接*/:hover/*鼠标移动到链接上*/:active/*选定的链接*/注意写的时候,他们的顺序尽量不要颠倒按照lvha的顺序。四背景和盒子模型背景1.背景颜色background-color颜色和transparent透明色2.背景图像background-image属性3.背景重复方式background-repeat属性repeat:沿水平和垂直两个方向平铺no-repeat:不平铺,即只显示一次repeat-x:只沿水平方向平铺repeat-y:只沿垂直方向平铺4.背景定位background-position属性5.background简写形式:background:#C00url(../image/arrow-down.gif)205px10pxno-repeat;6.background-size7.linear-gradient:颜色沿着一条直线过渡:从左到右、从右到左、从上到下等background:linear-gradient(totop,color1,color2);方向:totop,tolefttoright,tobottom盒子模型1.2边框颜色border-color3.border-widththinmediumthick像素值4border-style:nonehiddendotteddashedsoliddouble5同时设置边框的颜色、粗细和样式6marginmargin-topmargin-rightmargin-bottommargin-leftmargin7网页居中对齐网页居中对齐的必要条件块元素固定宽度8paddingpadding-leftpadding-rightpadding-toppadding-bottompadding9盒子模型总尺寸=border+padding+margin+内容宽度10border-radius:20px10px50px30px;四个属性值按顺时针排列11利用border-radius属性制作圆形的两个要点元素的宽度和高度必须相同圆角的半径为元素宽度的一半,或者直接设置圆角半径值为50%12利用border-radius属性制作半圆形的两个要点制作上半圆或下半圆时,元素的宽度是高度的2倍,而且圆角半径为元素的高度值制作左半圆或右半圆时,元素的高度是宽度的2倍,而且圆角半径为元素的宽度值13利用border-radius属性制作扇形遵循“三同,一不同”原则“三同”是元素宽度、高度、圆角半径相同“一不同”是圆角取值位置不同14box-shadow:insetx-offsety-offsetblur-radiuscolor五浮动和定位浮动1标准文档流:指元素根据块元素或行内元素的特性按从上到下,从左到右的方式自然排列。这也是元素默认的排列方式标准文档流组成:块级元素(block)<h1>…<h6>、<p>、<div>、列表内联元素和行级元素(inline)<span>、<a>、<img/>、<strong>...内联标签可以包含于块级标签中,成为它的子元素,而反过来则不成立2可以使用什么属性使块元素排在一行?1.inline-block2.float3属性值说明left元素向左浮动right元素向右浮动none默认值。元素不浮动,并会显示在其文本中出现的位置4浮动元素脱离标准文档流清除浮动值说明left在左侧不允许浮动元素right在右侧不允许浮动元素both在左、右两侧不允许浮动元素none默认值。允许浮动元素出现在两侧6浮动元素后面加空div:<divid="father"><divclass="layer01"><imgsrc="image/photo-1.jpg"alt="日用品"/></div><divclass="layer02"><imgsrc="image/photo-2.jpg"alt="图书"/></div><divclass="layer03"><imgsrc="image/photo-3.jpg"alt="鞋子"/></div><divclass="layer04">浮动的盒子……</div><divclass="clear"></div></div>.clear{clear:both;margin:0;padding:0;}7设置父元素的高度<divid="father"><divclass="layer01"><imgsrc="image/photo-1.jpg"alt="日用品"/></div><divclass="layer02"><imgsrc="image/photo-2.jpg"alt="图书"/></div><divclass="layer03"><imgsrc="image/photo-3.jpg"alt="鞋子"/></div><divclass="layer04">浮动的盒子……</div></div>#father{height:400px;border:1px#000solid;}8overflow属性:属性值说明visible默认值。内容不会被修剪,会呈现在盒子之外hidden内容会被修剪,并且其余内容是不可见的scroll内容会被修剪,但是浏览器会显示滚动条以便查看其余内容auto如果内容被修剪,则浏览器会显示滚动条以便查看其余的内容9父级添加overflow属性<divid="father"><divclass="layer01"><imgsrc="image/photo-1.jpg"alt="日用品"/></div><divclass="layer02"><imgsrc="image/photo-2.jpg"alt="图书"/></div><divclass="layer03"><imgsrc="image/photo-3.jpg"alt="鞋子"/></div><divclass="layer04">浮动的盒子……</div></div>#father{overflow:hidden;border:1px#000solid;}10父级添加伪类after<divid="father"class="clear"><divclass="layer01"><imgsrc="image/photo-1.jpg"alt="日用品"/></div><divclass="layer02"><imgsrc="image/photo-2.jpg"alt="图书"/></div><divclass="layer03"><imgsrc="image/photo-3.jpg"alt="鞋子"/></div><divclass="layer04">浮动的盒子……</div></div>.clear:after{content:'';/*在clear类后面添加内容为空*/display:block;/*把添加的内容转化为块元素*/clear:both;/*清除这个元素两边的浮动*/}11清除浮动,防止父级边框塌陷的四种方法1浮动元素后面加空div简单,空div会造成HTML代码冗余2设置父元素的高度简单,元素固定高会降低扩展性3父级添加overflow属性简单,下拉列表框的场景不能用4父级添加伪类after写法比上面稍微复杂一点,但是没有副作用,推荐使用12display:inline-block可以让元素排在一行,并且支持宽度和高度,代码实现起来方便位置方向不可控制,会解析空格IE6、IE7上不支持float可以让元素排在一行并且支持宽度和高度,可以决定排列方向float浮动以后元素脱离文档流,会对周围元素产生影响,必须在它的父级上添加清除浮动的样式定位position属性 static:默认值,没有定位 relative:相对定位 absolute:绝对定位 fixed:固定定位1static属性值2relative属性值 相对自身原来位置进行偏移偏移设置:top、left、right、bottom3absolute属性值偏移设置:left、right、top、bottom4fixed属性值偏移设置:left、right、top、bottom类似绝对定位,不过区别在于定位的基准不是祖先元素,而是浏览器窗口5相对定位的特性相对于自己的初始位置来定位元素位置发生偏移后,它原来的位置会被保留下来层级提高,可以把标准文档流中的元素及浮动元素盖在下边相对定位的使用场景相对定位一般情况下很少自己单独使用,都是配合绝对定位使用,为绝对定位创造定位父级而又不设置偏移量6绝对定位的特性绝对定位是相对于它的定位父级的位置来定位,如果没有设置定位父级,则相对浏览器窗口来定位元素位置发生偏移后,原来的位置不会被保留层级提高,可以把标准文档流中的元素及浮动元素盖在下边设置绝对定位的元素脱离文档流绝对定位的使用场景一般情况下,绝对定位用在下拉菜单、焦点图轮播、弹出数字气泡、特别花边等场景7固定定位的特性相对浏览器窗口来定位偏移量不会随滚动条的移动而移动固定定位的使用场景一般在网页中被用在窗口左右两边的固定广告、返回顶部图标、吸顶导航栏等8调整元素定位时重叠层的上下位置z-index属性值:整数,默认值为0设置了positon属性时,z-index属性可以设置各元素之间的重叠高低关系z-index值大的层位于其值小的层上方六CSS3动画1会使用transform2D变形设置网页元素样式1如何在网页中实现动画效果?动态图片FlashJavaScriptCSS3变形CSS3过渡CSS3动画2CSS3变形是一些效果的集合如平移、旋转、缩放、倾斜效果每个效果都可以称为变形(transform),它们可以分别操控元素发生平移、旋转、缩放、倾斜等变化变形函数translate():平移函数,基于X、Y坐标重新定位元素的位置scale():缩放函数,可以使任意元素对象尺寸发生变化rotate():旋转函数,取值是一个度数值skew():倾斜函数,取值是一个度数值translateX(tx)表示只设置X轴的位移translateY(ty)表示只设置Y轴的位移translateX(tx)表示只设置X轴的位移translateY(ty)表示只设置Y轴的位移scale()函数可以只接收一个值,也可以接收两个值,只有一个值时,第二个值默认和第一个值相等scaleX(sx):表示只设置X轴的缩放scaleY(sy):表示只设置Y轴的缩放可以仅设置沿着X轴或Y轴方向倾斜skewX(ax):表示只设置X轴的倾斜skewY(ay):表示只设置Y轴的倾斜skew()函数是倾斜,元素不会旋转,会改变元素的形状参数a单位使用deg表示参数a取正值时元素相对原来中心顺时针旋转rotate()函数只是旋转,而不会改变元素的形状transition呈现的是一种过渡,是一种动画转换的过程,如渐现、渐弱、动画快慢等CSS3transition的过渡功能更像是一种“黄油”,通过一些CSS的简单动作触发样式平滑过渡过渡属性(transition-property)定义转换动画的CSS属性名称IDENT:指定的CSS属性(width、height、background-color属性等)all:指定所有元素支持transition-property属性的样式,一般为了方便都会使用all过渡所需的时间(transition-duration)定义转换动画的时间长度,即从设置旧属性到换新属性所花费的时间,单位为秒(s)过渡所需的时间(transition-duration)定义转换动画的时间长度,即从设置旧属性到换新属性所花费的时间,单位为秒(s)过渡动画函数(transition-timing-function)指定浏览器的过渡速度,以及过渡期间的操作进展情况,通过给过渡添加一个函数来指定动画的快慢方式ease:速度由快到慢(默认值)linear:速度恒速(匀速运动)ease-in:速度越来越快(渐显效果)ease-out:速度越来越慢(渐隐效果)ease-in-out:速度先加速再减速(渐显渐隐效果)过渡动画函数(transition-timing-function)指定浏览器的过渡速度,以及过渡期间的操作进展情况,通过给过渡添加一个函数来指定动画的快慢方式ease:速度由快到慢(默认值)linear:速度恒速(匀速运动)ease-in:速度越来越快(渐显效果)ease-out:速度越来越慢(渐隐效果)ease-in-out:速度先加速再减速(渐显渐隐效果)过渡延迟时间(transition-delay)指定一个动画开始执行的时间,当改变元素属性值后多长时间去执行过渡效果正值:元素过渡效果不会立即触发,当过了设置的时间值后才会被触发负值:元素过渡效果会从该时间点开始显示,之前的动作被截断0:默认值,元素过渡效果立即执行伪类触发:hover:active:focus:checked媒体查询:通过@media属性判断设备的尺寸,方向等JavaScript触发:用JavaScript脚本触发2会使用transition制作过渡动画在默认样式中声明元素的初始状态样式声明过渡元素最终状态样式,如悬浮状态在默认样式中通过添加过渡函数,添加一些不同的样式3会使用animation制作网页动画七Ajax理解Ajax技术Web2.0的特点用户贡献内容内容聚合RSS更丰富的“用户体验无刷新:不刷新整个页面,只刷新局部无刷新的好处只更新部分页面,有效利用带宽提供连续的用户体验提供类似C/S的交互效果,操作更方便Ajax:异步刷新技术掌握jQuery的$.ajax()方法传统方式实现Ajax的不足步骤繁琐方法、属性、常用值较多不好记忆处理复杂结构的响应数据(如XML格式)比较烦琐浏览器兼容问题$.ajax({"url":"url",//要提交的URL路径"type":"get",//发送请求的方式"data":data,//要发送到服务器的数据"dataType":"text",//指定传输的数据格式"success":function(result){//请求成功后要执行的代码 },"error":function(){//请求失败后要执行的代码 }});掌握JSON的使用JSON(JavaScriptObjectNotation)一种轻量级的数据交换格式采用独立于语言的文本格式通常用于在客户端和服务器之间传递数据JSON的优点轻量级交互语言结构简单易于解析掌握jQuery的$.get()和$.post()方法$.get(url[,data][,success][,dataType]);$.get(url,data,function(result){ //省略将服务器返回的数据显示到页面的代码});$.ajax({ "url":url, "data":data, "type":"get", "success":function(result){ //省略代码 }});$.post(url[,data][,success][,dataType]);$.post(url,data,function(result){ //省略将服务器返回的数据显示到页面的代码});$.ajax({ "url":url, "data":data, "type":"post", "success":function(result){ //省略代码 }});七使用jQuery操作DOM1使用jQuery操作CSS样式DOM操作分为三类:DOMCore:任何一种支持DOM的编程语言都可以使用它,如getElementById()HTML-DOM:用于处理HTML文档,如document.formsCSS-DOM:用于操作CSS,如element.style.color="green"jQuery对JavaScript中的DOM操作进行了封装jQuery中的DOM操作样式操作内容及Value值操作节点操作节点属性操作节点遍历CSS-DOM操作使用css()为指定的元素设置样式值或获取样式值追加样式selector).removeClass("class");或$(selector).removeClass("class1class2…classN");toggleClass()模拟了addClass()与removeClass()实现样式切换的过程hasClass()方法来判断是否包含指定的样式html()可以对HTML代码进行操作,类似于JS中的innerHTMLtext()可以获取或设置元素的文本内容val()可以获取或设置元素的value属性值jQuery中节点操作查找节点(前面章节已讲)创建节点插入节点删除节点替换节点复制节点工厂函数$()用于获取或创建节点$(selector):通过选择器获取节点$(element):把DOM节点转化成jQuery节点$(html):使用HTML字符串创建jQuery节点jQuery提供了三种删除节点的方法remove():删除整个节点empty():清空节点内容detach():删除整个节点,保留元素的绑定事件、附加的数据,将移出的元素作为返回值,并且带有数据和事件replaceWith()和replaceAll()用于替换某个节点clone()用于复制某个节点attr()用来获取与设置元素属性removeAttr()用来删除元素的属性children()方法可以用来获取元素的所有子元素jQuery可以获取紧邻其后、紧邻其前和位于该元素前与后的所有同辈元素jQuery中可以遍历前辈元素parent():获取元素的父级元素parents():元素元素的祖先元素each():规定为每个匹配元素规定运行的函数end():结束当前链条中的最近的筛选操作,并将匹配元素集还原为之前的状态除css()外,还有获取和设置元素高度、宽度等的样式操作方法使用jQuery操作网页元素使用jQuery操作文本与属性值内容使用jQuery操作DOM节点使用jQuery遍历DOM节点使用jQuery操作CSS-DOM八表单校验1掌握String对象的用法减轻服务器的压力保证输入的数据符合要求日期格式表单元素是否为空用户名和密码E-mail地址身份证号码会使用表单选择器选择页面元素表单选择器用于选取某些特定的表单元素,比如所有单选按钮或隐藏的元素语法描述示例:input匹配所有input、textarea、select和button元素$("#myform:input")选取表单中所有的input、select和button元素:text匹配所有单行文本框$("#myform:text")选取email和姓名两个input元素:password匹配所有密码框$("#myform:password"
)选取所有<inputtype="password"/>元素:radio匹配所有单项按钮$("#myform:radio")选取<inputtype="radio"/>元素:checkbox匹配所有复选框$("#myform:checkbox"
)选取<inputtype="checkbox"/>元素:submit匹配所有提交按钮$("#myform:submit"
)选取<inputtype="submit"/>元素语法描述示例:image匹配所有图像域$("#myform:image"
)选取<inputtype="image"/>元素:reset匹配所有重置按钮$("#myform:reset"
)选取<inputtype="reset"/>元素:button匹配所有按钮$("#myform:button"
)选取button元素:file匹配所有文件域$("#myform:file"
)选取<inputtype="file"/>元素:hidden匹配所有不可见元素,或者type为hidden的元素$("#myform:hidden"
)选取<inputtype="hidden"/>、style="display:none"等元素语法描述示例:enabled匹配所有可用元素$("#userform:enabled"
)匹配form内部除编号输入框外的所有元素:disabled匹配所有不可用元素$("#userform:disabled"
)匹配编号输入框:checked匹配所有被选中元素(复选框、单项按钮、select中的option)$("#userform:checked"
)匹配“性别”中的“男”选项和“爱好”中的“编程”选项:selected匹配所有选中的option元素$("#userform:selected"
)匹配“家乡”中的“北京”选项会使用HTML5的方式验证表单内容使用String对象验证邮箱不能为空,格式正确文本框内容的验证密码不能为空,不少于6个字符,姓名不能为空,不能有数字实现思路使用val()方法获取文本框的值使用indexOf()来判断字符串是否包含“@”和“.”使用方法submit()提交表单根据返回值是true还是false来决定是否提交表单字符串查找indexOf():查找某个指定的字符串值在字符串中首次出现的位置实现思路使用String对象的length属性验证密码的长度验证两次输入密码是否一致使用length属性获取文本长度,然后使用for循环和substring()方法依次截断单个字符,最后判断每个字符是否是数字三、实践过程实践周操作上机操作四、实验成果基于python的学生管理系统学生管理系统学生管理系统v1.0
1.添加学生的信息
2.删除学生的信息
3.修改学生的信息
4.查询学生的信息
5.遍历所有学生的信息
6.退出系统开始django-adminstartprojectstudent_sys创建App进入student_sys目录中pythonmanage.pystartappstudent编写Model层:fromdjango.dbimportmodelsclassStudent(models.Model):SEX_ITEMS=[(1,'男'),(2,'女'),(0,'未知'),]STATUS_ITEMS=[(0,'申请'),(1,'通过'),(2,'拒绝'),]name=models.CharField(max_length=128,verbose_name="姓名")sex=models.IntegerField(choices=SEX_ITEMS,verbose_name="性别")profession=models.CharField(max_length=128,verbose_name="职业")email=models.EmailField(verbose_name="Email")qq=models.CharField(max_length=128,verbose_name="QQ")phone=models.CharField(max_length=128,verbose_name="电话")status=models.IntegerField(choices=STATUS_ITEMS,default=0,verbose_name="审核状态")created_time=models.DateTimeField(auto_now_add=True,editable=False,verbose_name="创建时间")def__str__(self):return'<Student:{}>'.format()classMeat:verbose_name=verbose_name_plural="学员信息"编写admin.pyfromdjango.contribimportadminfrom.modelsimportStudentclassStudentAdmin(admin.ModelAdmin):list_display=('id','name','sex','profession','email','qq','phone','status','created_time')list_filter=('sex','status','created_time')search_fields=('name','profession')fieldsets=((None,{'fields':('name',('sex','profession'),('email','qq','phone'),'status',)}))admin.site.register(Student,StudentAdmin)配置settings.pyINSTALLED_APPS=['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','student',]接下来在mysql中创建库CREATEDATABASEstudent_sysCHARACTERSETutf8;接下来配置Django的默认存储数据库配置settings.pyDATABASES={#'default':{#'ENGINE':'django.db.backends.sqlite3',#'NAME':os.path.join(BASE_DIR,'db.sqlite3'),#}'default':{'ENGINE':'django.db.backends.mysql','HOST':'','PORT':'3306','NAME':'student_sys','USER':'你的mysql账号','PASSWORD':'你的mysql密码'}}创建数据库迁移文件,创建表,创建用户:pythonmanage.pymakemigrations#创建数据库迁移文件pythonmanage.pymigrate#创建表pythonmanage.pycreatesuperuser#创建后台登录用户开发学员管理系统的前台开发小测试:创建视图在student/views.py文件中:formdjango.shortcutsimportrenderdefindex(request): words=‘世界’ returnrender(request,‘index.html’,context={‘words’:words})在student这个App的目录下创建templates文件夹再创建index.html页面模板<!DOCTYPEhtml><html><head><title>学员管理系统</title></head><body> hello{{words}}!</body></html>要注意的是{{xxx}}这是模板语法xxx两边要有空格,这里的xxx的值是views.py中的render方法返回过来的接下来我们要去配置路由fromdjango.contribimportadminfromdjango.conf.urlsimporturlfromstudent.viewsimportindexurlpatterns=[url(r'^$',index,name='index'),url(r'^admin/',admin.site.urls),]接下来就可以启动web服务pythonmanage.pyrunserver输出学生信息修改views.pyfromdjango.shortcutsimportrenderfrom.modelsimportStudentdefindex(request):students=Student.objects.all()returnrender(request,'index.html',context={'students':students})修改index.html代码<!DOCTYPEhtml><html><head><title>学员管理系统</title></head><body><ul>{%forstudentinstudents%}<li>{{}}-{{student.get_status_display}}</li>{%endfor%}</ul></body></html>提交数据添加学生创建表单文件,在student目录下创建forms.py它要跟views.py同级#-*-coding:utf-8-*-fromdjangoimportformsfrom.modelsimportStudentclassStudentForm(forms.ModelForm):defclean_qq(self):cleaned_data=self.cleaned_data['qq']ifnotcleaned_data.isdigit():returnforms.ValidationError('必须时数字')returnint(cleaned_data)classMeta:model=Studentfields=('name','sex','profession','status','email','qq','phone')修改视图文件views.pyfromdjango.httpimportHttpResponseRedirectfromdjango.shortcutsimportrenderfromdjango.urlsimportreversefrom.formsimportStudentFormfrom.modelsimportStudentdefindex(request):students=Student.objects.all()ifrequest.method=='POST':form=StudentForm(request.POST)ifform.is_valid():form.save()returnHttpResponseRedirect(reverse('index'))else:form=StudentForm()context={'students':students,'form':form,}returnrender(request,'index.html',context=context)修改index页面<!DOCTYPEhtml><html><head><title>学员管理系统</title></head><body><ul>{%forstudentinstudents%}<li>{{}}-{{student.get_status_display}}</li>{%endfor%}</ul><hr><formaction="/"method="post">{%csrf_token%}<table><tr><td>姓名</td><td>{{}}</td></tr><tr><td>性别</td><td>{{form.sex}}</td></tr><tr><td>职业</td><td>{{fession}}</td></tr><tr><td>审核状态</td><td>{{form.status}}</td></tr><tr><td>邮箱</td><td>{{form.email}}</td></tr><tr><td>qq</td><td>{{form.qq}}</td></tr><tr><td>电话</td><td>{{form.phone}}</td></tr></table><inputtype="submit"value="添加"/></form></body></html>如果需要在页面添加css和js则需要配置样式的路由:在setting.py的最后面添加#Staticfiles(CSS,JavaScript,Images)#/en/2.2/howto/static-files/#STATIC_URL='/static/'#STATICFILES_DIRS=[#("css",os.path.join(STATIC_URL,'css')),#("img",os.path.join(STATIC_URL,'img')),#("js",os.path.join(STATIC_URL,'js')),#]STATIC_URL='/static/'HERE=os.path.dirname(os.path.abspath(__file__))HERE=os.path.join(HERE,'../')STATICFILES_DIRS=(#Putstringshere,like"/home/html/static"or"C:/www/django/static".#Alwaysuseforwardslashes,evenonWindows.#Don'tforgettouseabsolutepaths,notrelativepaths.os.path.join(HERE,'static/'),)在项目的根目录下创建static文件夹在里面放置需要的静态文件接下来需要在index.html页面的头部添加用户登录urls.py的配置fromdjango.contribimportadminfromdjango.conf.urlsimporturlfromstudent.viewsimportindexfromstudent.viewsimportloginurlpatterns=[url(r'^$',index,name='index'),url(r'^login/$',login,name='login'),url(r'^admin/',admin.site.urls),]models.py配置classUser(models.Model):username=models.CharField(max_length=16)password=models.CharField(max_length=32)views.py配置fromdjango.httpimportHttpResponseRedirectfromdjango.shortcutsimportrender,redirect,HttpResponsefromdjango.urlsimportreversefrom.formsimportStudentFormfrom.modelsimportStudent,Usersfromfunctoolsimportwraps#说明:这个装饰器的作用,就是在每个视图函数被调用时,都验证下有没有登录,#如果登录了,则可执行新的视图函数,如果没有登录则跳转到登录页面defcheck_login(f):@wraps(f)definner(request,*arg,**kwargs):ifrequest.session.get('is_login')=='1':returnf(request,*arg,**kwargs)else:returnredirect('/login/')returninnerdeflogin(request):ifrequest.method=="POST":username=request.POST.get('username')password=request.POST.get('password')u=Users.objects.filter(username=username,password=password)ifu:#登录成功,session存储相应的数据request.session['is_login']='1'request.session['user_id']=u[0].idprint(u[0].id)returnredirect('/')#如果是GET请求,就说明是用户刚开始登录,使用URL直接进入登录页面的returnrender(request,'login.html')@check_logindefindex(request):user_id1=request.session.get('user_id')userobj=Users.objects.filter(id=user_id1)students=Student.objects.all()#returnrender(request,'index.html',context={'students':students})ifrequest.method=='POST':form=StudentForm(request.POST)ifform.is_valid():#cleaned_data=form.cleaned_data#student=Student()#=cleaned_data['name']#student.sex=cleaned_data['sex']#student.email=cleaned_data['email']#fession=cleaned_data['profession']#student.qq=cleaned_data['qq']#student.phone=cleaned_data['phone']#student.save()form.save()returnHttpResponseRedirect(reverse('index'))else:form=StudentForm()context={'students':students,'form':form,'loginuser':userobj[0],}returnrender(request,'index.html',context=context)添加login.html页面模板<!DOCTYPEhtml><html><head><metacharset="UTF-8"><title>登录</title></head><body><h1>用户登录</h1><formaction="/login/"method="post">{%csrf_token%}用户名:<inputtype="text"name="username"><br>密码:<inputtype="password"name="password"><br><inputtype="submit"></form></body></html>修改index.html页面,添加显示登录人姓名<!DOCTYPEhtml><html><head><title>学员管理系统</title><linkrel="stylesheet"href="../static/css/index.css"><scriptsrc="../static/js/myjs.js"></script></head><body><p>欢迎:{{loginuser.username}}登录</p><ul>{%forstudentinstudents%}<li>{{}}-{{student.get_status_display}}</li>{%endfor%}</ul><hr><formaction="/"method="post">{%csrf_token%}<table><tr><td>姓名</td><td>{{}}</td></tr><tr><td>性别</td><td>{{form.sex}}</td></tr><tr><td>职业</td><td>{{fession}}</td></tr><tr><td>审核状态</td><td>{{form.status}}</td></tr><tr><td>邮箱</td><td>{{form.email}}</td></tr><tr><td>qq</td><td>{{form.qq}}</td></tr><tr><td>电话</td><td>{{form.phone}}</td></tr></table><!--{{form}}--><inputtype="submit"value="添加"/></form></body></html>因为新增了模型,所以需要进行数据配置pythonmanage.pymakemigrations#创建数据库迁移文件pythonmanage.pymigrate#创建表修改学生信息修改urls.pyfromdjango.contribimportadminfromdjango.conf.urlsimporturlfromstudent.viewsimportindex,login,editstudenturlpatterns=[url(r'^$',index,name='index'),url(r'^login/$',login,name='login'),url(r'^editstudent',editstudent,name='editstudent'),url(r'^admin/',admin.site.urls),]修改index.html{%forstudentinstudents%}<li>{{}}-{{student.get_status_display}}<ahref="/editstudent?userid={{student.id}}">修改</a></li>{%endfor%}创建editstudent.html页面模板<!DOCTYPEhtml><html><head><title>修改</title></head><body><p>欢迎:{{loginuser.username}}登录</p><hr><formaction="/editstudent"method="post">{%csrf_token%}<table><tr><td>姓名</td><td>{{}}</td></tr><tr><td>性别</td><td>{{form.sex}}</td></tr><tr><td>职业</td><td>{{fession}}</td></tr><tr><td>审核状态</td><td>{{form.status}}</td></tr><tr><td>邮箱</td><td>{{form.email}}</td></tr><tr><td>qq</td><td>{{form.qq}}</td></tr><tr><td>电话</td><td>{{form.phone}}</td></tr></table><inputtype="hidden"name="eduid"value="{{uid}}"><inputtype="submit"value="修改"/></form></body></html>修改views.py@check_logindefeditstudent(request):user_id1=request.session.get('user_id')userobj=Users.objects.filter(id=user_id1)eduid=-1ifrequest.method=='POST':print()eduid=request.POST.get("eduid")editstu=Student.obj
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 国开(内蒙古)2025年《劳动人事政策与法规》形考作业1-3终考答案
- 对口高考文秘试卷及答案
- 商务中心项目投标书
- 广东省茂名市项目部消防安全测试题十八(含答案)
- 2025年腹膜透析知识题库及答案
- 2026年兰州职业技术学院单招职业适应性测试必刷测试卷完美版
- 2026年台州科技职业学院单招综合素质考试题库完美版
- 2026年厦门演艺职业学院单招职业技能测试题库含答案
- 2026年云南经贸外事职业学院单招职业适应性考试题库新版
- 2026年上海海事大学单招职业倾向性考试必刷测试卷新版
- 2025-2026学年江苏省镇江市初三上学期数学月考试题【附答案】
- 2025年许昌禹州市特招医学院校毕业生招聘86名备考练习试题及答案解析
- 脑梗阿替普酶溶栓课件
- 激光基础知识培训课件
- 智媒时代网络舆论:新态势、困境与路径探索
- 变压器简介教学课件
- 2025农行内部审计考试题及答案
- 产科预防接种课件
- 2025年秋沪科版八年级数学上册 第12章 函数与一次函数 综合测试卷(含答案)
- 2025年中小学生安全知识知识竞赛试题库及答案
- 2025年执业药师《中药学综合知识与技能》考试真题及答案解析
评论
0/150
提交评论