一、正则表达式
1、定义正则表达式
/.../ 用于定义正则表达式
/.../g 表示全局匹配
/.../i 表示不区分大小写
/.../m 表示多行匹配
JS正则匹配时本身就是支持多行,此处多行匹配只是影响正则表达式^和$,m模式也会使用^$来匹配换行的内容)
varpattern=/^Java\w*/gm; vartext="JavaScriptismorefunthan\nJavaEEorJavaBeans!"; result=pattern.exec(text) result=pattern.exec(text) result=pattern.exec(text)
注:定义正则表达式也可以reg= new RegExp()
2、匹配
JavaScript中支持正则表达式,其主要提供了两个功能:
test(string) 检查字符串中是否和正则匹配
rep=/\d+/; rep.test("asdfoiklfasdf89asdfasdf")#true rep=/^\d+$/; rep.test("123456789")#true
# 只要正则在字符串中存在就匹配,如果想要开头和结尾匹配的话,就需要在正则前后加 ^和$
获取正则表达式匹配的内容,如果未匹配,值为null,否则,获取匹配成功的数组。 非全局模式 获取匹配结果数组,注意:第一个元素是第一个匹配的结果,后面元素是正则子匹配(正则内容分组匹配) varpattern=/\bJava\w*\b/; vartext="JavaScriptismorefunthanJavaorJavaBeans!"; result=pattern.exec(text) varpattern=/\b(Java)\w*\b/; vartext="JavaScriptismorefunthanJavaorJavaBeans!"; result=pattern.exec(text) 全局模式 需要反复调用exec方法,来一个一个获取结果,直到匹配获取结果为null表示获取完毕 varpattern=/\bJava\w*\b/g; vartext="JavaScriptismorefunthanJavaorJavaBeans!"; result=pattern.exec(text) varpattern=/\b(Java)\w*\b/g; vartext="JavaScriptismorefunthanJavaorJavaBeans!"; result=pattern.exec(text)
字符串中相关方法
obj.search(regexp)获取索引位置,搜索整个字符串,返回匹配成功的第一个位置(g模式无效) obj.match(regexp)获取匹配内容,搜索整个字符串,获取找到第一个匹配内容,如果正则是g模式找到全部 obj.replace(regexp,replacement)替换匹配替换,正则中有g则替换所有,否则只替换第一个匹配项, $数字:匹配的第n个组内容; $&:当前匹配的内容; $`:位于匹配子串左侧的文本; $':位于匹配子串右侧的文本 $$:直接量$符号
默认事件先执行: checkBox 自定义先执行 a submit ... <form> <inputtype='type'/> <inputtype='password'/> <inputtype='submit'/> </form> $(':submit').click(function(){ $(':text,:password').each(function(){ ...returnfalse; })returnfalse; }) input,checBox ==================================验证================================ JS:验证 各种验证 $(':submit').click(function(){ $(':text,:password').each(function(){ ...returnfalse; })returnfalse; })
三、组件
1.BootStrap
下载:http://www.bootcss.com/
学习 BootStrap 规则
一、响应式
@media
例:响应式布局
<!DOCTYPEhtml> <htmllang="en"> <head> <Metacharset="UTF-8"> <title>Title</title> <style> .c1{ background-color:red; height:50px; } @media(min-width:700px){ .c2{ background-color:grey; } } </style> </head> <body> <divclass="c1c2"></div> </body> </html>
二、图标、字体
@font-face
三、基本使用
加个最先应用的格式
<style> .no-redus{ border-radius:0px;!important; } </style>
2.jQUeryUI *
下载:http://jqueryui.com/
3.EasyUI
下载:http://www.jeasyui.net/
修改css并应用
4.jquery.bxslider轮播图
http://bxslider.com/ 下载引用
<!DOCTYPEhtml> <htmllang="en"> <head> <Metacharset="UTF-8"> <title>Title</title> <linkrel="stylesheet"href="jquery.bxslider/jquery.bxslider.css"> </head> <body> <ulclass="bxslider"> <li><imgsrc="image/1.png"style="width:500px;height:200px;"/></li> <li><imgsrc="image/1.png"style="width:500px"/></li> <li><imgsrc="image/1.png"style="width:500px"/></li> </ul> <scriptsrc="js/jquery-1.12.4.js"></script> <scriptsrc="jquery.bxslider/jquery.bxslider.js"></script> <script> $(document).ready(function(){ $('.bxslider').bxSlider(); }); </script> </body> </html>
四、web框架
MVC
Model View Controller
数据库 模板文件 业务处理
MTV
Model Template View
数据库 模板文件 业务处理
############## WEB:MVC、MTV
Web框架本质
众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端。
#!/usr/bin/envpython#coding:utf-8 importsocket defhandle_request(client): buf=client.recv(1024) client.send("HTTP/1.1200OK\r\n\r\n") client.send("Hello,Seven") defmain(): sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM) sock.bind(('localhost',8000)) sock.listen(5) whileTrue: connection,address=sock.accept() handle_request(connection) connection.close() if__name__=='__main__': main()
上述通过socket来实现了其本质,而对于真实开发中的python web程序来说,一般会分为两部分:服务器程序和应用程序。服务器程序负责对socket服务器进行封装,并在请求到来时,对请求的各种数据进行整理。应用程序则负责具体的逻辑处理。为了方便应用程序的开发,就出现了众多的Web框架,例如:Django、Flask、web.py 等。不同的框架有不同的开发方式,但是无论如何,开发出的应用程序都要和服务器程序配合,才能为用户提供服务。这样,服务器程序就需要为不同的框架提供不同的支持。这样混乱的局面无论对于服务器还是框架,都是不好的。对服务器来说,需要支持各种不同框架,对框架来说,只有支持它的服务器才能被开发出的应用使用。这时候,标准化就变得尤为重要。我们可以设立一个标准,只要服务器程序支持这个标准,框架也支持这个标准,那么他们就可以配合使用。一旦标准确定,双方各自实现。这样,服务器可以支持更多支持标准的框架,框架也可以使用更多支持标准的服务器。
WSGI(Web Server Gateway Interface)是一种规范,它定义了使用python编写的web app与web server之间接口格式,实现web app与web server间的解耦。
python标准库提供的独立WSGI服务器称为wsgiref。
#!/usr/bin/envpython#coding:utf-8 fromwsgiref.simple_serverimportmake_server defRunServer(environ,start_response): start_response('200OK',[('Content-Type','text/html')])return['<h1>Hello,web!</h1>'.encode('utf-8'),] if__name__=='__main__': httpd=make_server('',8000,RunServer)print"ServingHTTPonport8000..." httpd.serve_forever()
五、Django
1.安装
pip3installdjango
2.创建Django工程
django-adminstartproject【工程名称】
例如:工程名称为mysite;那么mysite目录下会产生如下目录及文件。
mysite
- mysite # 对整个程序进行配置
- init
- settings # 配置文件
- url # URL对应关系
- wsgi # 遵循WSIG规范,uwsgi + Nginx
- manage.py # 管理Django程序:
- python manage.py
- python manage.py startapp xx
- python manage.py makemigrations
- python manage.py migrate
Bottle默认支持多种基于WSGI的服务,如:
server_names={ 'cgi':CGIServer,'flup':FlupFCGIServer,'wsgiref':WSGIRefServer,'waitress':WaitressServer,'cherrypy':CherryPyServer,'paste':PasteServer,'fapws3':FapwsServer,'tornado':TornadoServer,'gae':AppEngineServer,'twisted':TwistedServer,'diesel':DieselServer,'meinheld':MeinheldServer,'gunicorn':GunicornServer,'eventlet':EventletServer,'gevent':GeventServer,'geventSocketIO':GeventSocketIOServer,'rocket':RocketServer,'bjoern':BjoernServer,'auto':AutoServer,}
3.运行Django功能
语法:python manage.py runserver ip:port
pythonmanage.pyrunserver127.0.0.1:8001
4.创建APP
pythonmanage.pystartappcmdb
- migrations 数据修改表结构
- admin Django为我们提供的后台管理
- apps 配置当前app
- models ORM,写指定的类 通过命令可以创建数据库结构
- tests 单元测试
- views 业务代码
示例:表单验证
内容整理
1.创建Django工程 django-adminstartproject工程名 2.创建APP cd工程名 pythonmanage.pystartappcmdb 3、静态文件 project.settings.py STATICFILES_DIRS=( os.path.join(BASE_DIR,"static"),) 4、模板路径 DIRS==>[os.path.join(BASE_DIR,'templates'),] 5、settings中 middlerware #注释csrf 6、定义路由规则 url.py "login"-->函数名 7、定义视图函数 app下views.py deffunc(request):#request.methodGET/POST #http://127.0.0.1:8009/home?nid=123&name=alex #request.GET.get('',None)#获取请求发来的而数据 #request.POST.get('',None) #returnHttpResponse("字符串") #returnrender(request,"HTML模板的路径") #returnredirect('/只能填URL') 8、模板渲染 特殊的模板语言 --{{变量名}} deffunc(request):returnrender(request,"index.html",{'current_user':"alex"}) index.html <html> .. <body> <div>{{current_user}}</div> </body> </html> ====>最后生成的字符串 <html> .. <body> <div>alex</div> </body> </html> --For循环deffunc(request):returnrender(request,{'current_user':"alex",'user_list':['alex','eric']}) index.html <html> .. <body> <div>{{current_user}}</div> <ul> {%forrowinuser_list%} {%ifrow=="alex"%} <li>{{row}}</li> {%endif%} {%endfor%} </ul> </body> </html> #####索引################# deffunc(request):returnrender(request,'eric'],'user_dict':{'k1':'v1','k2':'v2'}}) index.html <html> .. <body> <div>{{current_user}}</div> <a>{{user_list.1}}</a> <a>{{user_dict.k1}}</a> <a>{{user_dict.k2}}</a> </body> </html> ######条件 deffunc(request):returnrender(request,"age":18,'k2':'v2'}}) index.html <html> .. <body> <div>{{current_user}}</div> <a>{{user_list.1}}</a> <a>{{user_dict.k1}}</a> <a>{{user_dict.k2}}</a> {%ifage%} <a>有年龄</a> {%ifage>16%} <a>老男人</a> {%else%} <a>小鲜肉</a> {%endif%} {%else%} <a>无年龄</a> {%endif%} </body> </html>原文链接:https://www.f2er.com/regex/358705.html