一、正则表达式
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
# 只要正则在字符串中存在就匹配,如果想要开头和结尾匹配的话,就需要在正则前后加 ^和$
exec(string) 获取正则表达式匹配的内容,如果未匹配,值为null,否则,获取匹配成功的数组。
获取正则表达式匹配的内容,如果未匹配,值为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>