一、正则表达式
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)
字符串中相关方法
- 默认事件先执行:
- 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>