1.js正则表达式
1.1 test 匹配字符串是否符合规定的正则
1.2 exec 获取匹配的数据
rep = /^\d+$/
/^\d+$/
rep.test('12312312312321')
true
rep.test('12312312312321asfasfas')
false
注:简单匹配
2.全局匹配g
javastr = "javaasda 1231 31231 java javasctipt"
"javaasda 1231 31231 java javasctipt"
patten = /\bjava\w*\b/g
/\bjava\w*\b/g
patten.exec(javastr)
["javaasda", index: 0, input: "javaasda 1231 31231 java javasctipt"]
patten.exec(javastr)
["java", index: 20, input: "javaasda 1231 31231 java javasctipt"]
patten.exec(javastr)
["javasctipt", index: 25, input: "javaasda 1231 31231 java javasctipt"]
patten.exec(javastr)
null
3.web框架
解:所有的web站点或者web请求本质就是socket,不管服务器端是apache,或者tomcat或者nginx等等;运行起来就是socket server,浏览器充当客户端,http是无状态的服务
#!/usr/bin/env python
# this is Charlie scripts!
import socket
def handle_request(client):
buf = client.recv(1024)
client.send("HTTP/1.1 200 OK\r\n\r\n")
client.send("Hello,Seven")
def main():
sock = socket.socket()
sock.bind(('127.0.0.1',8000))
sock.listen(5)
while True:
connection, address = sock.accept()
handle_request(connection)
connection.close()
if __name__ == "__main__":
main()
注:所有的web框架的本质就是以上的代码
4.python分装socketserver
#!/usr/bin/env python
from wsgiref.simple_server import make_server
def RunServer(environ,start_response):
start_response('200 OK',[('Content-Type','text/html')])
return '<h1>Hello,web!</h1>'
if __name__ == "__main__":
httpd = make_server('',8000,RunServer)
print "Serving HTTP on port 8000..."
httpd.serve_forever()
注:不需要字节写socketserver,只要有客户请求自动触发runserver方法
5.python3写法
#!/usr/bin/env python3
from wsgiref.simple_server import make_server
# tasklist | findstr "8000"
# tskill pidnum
def RunServer(environ,start_response):
start_response('200 OK',[('Content-Type','text/html')])
return ['<h1>Hello,web!</h1>'.encode("utf-8")]
if __name__ == "__main__":
httpd = make_server('',8001,RunServer)
print("Serving HTTP on port 8001...")
httpd.serve_forever()
6.django创建初始项目
PS D:\> django-admin.exe startproject mysite
PS D:\mysite> python.exe .\manage.py runserver <127.0.0.1:8001>
注:如果需要针对django项目文件修改就要暂停服务重新开启
7.修改url配置文件
"""laoniu URL Configuration
The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/1.11/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: url(r'^$', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.conf.urls import url, include
2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls'))
"""
from django.conf.urls import url
from django.contrib import admin
from xiaoniu import s1
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^index/', s1.index),
]
8.新添加s1站点文件
#!/usr/bin/env python3
from django.shortcuts import HttpResponse
def index(request):
return HttpResponse("身高一米八")
注:通过测试可以得知,django内部启动了socketserver,一旦有用户访问8001/index,那么django就会返回函数作为结果给客户端
9.项目结构
PS D:\laoniu\laoniu> dir
目录: D:\laoniu\laoniu
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2017/12/22 11:55 __pycache__
-a---- 2017/12/22 10:51 3216 settings.py
-a---- 2017/12/22 11:55 834 urls.py
-a---- 2017/12/22 10:51 406 wsgi.py
-a---- 2017/12/22 10:51 0 __init__.py
注:django不负责写socketserver功能,django是依赖wsgi去创建socket的;wsgi其实是一套规则,一套接口,如果按照规则写,就可以达到socketserver的功能,而此处django内部就是用的wsgi_ref实现socket功能,而我们写程序不会用默认的wsgi,而是用uwsgi+nginx去跑程序
10.创建app
PS C:\Users\11025\PycharmProjects\s14django> python.exe .\manage.py startapp cmdb
注:注意,和功能目录是同一个目录级,不要弄错了
11.APP目录结构
PS C:\Users\11025\PycharmProjects\s14django\cmdb> dir
目录: C:\Users\11025\PycharmProjects\s14django\cmdb
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2017/12/22 16:28 migrations
d----- 2017/12/22 16:32 __pycache__
-a---- 2017/12/22 16:28 66 admin.py
-a---- 2017/12/22 16:28 88 apps.py
-a---- 2017/12/22 16:28 60 models.py
-a---- 2017/12/22 16:28 63 tests.py
-a---- 2017/12/22 16:32 171 views.py
-a---- 2017/12/22 16:28 0 __init__.py
注:migrations保存的是修改数据库表结构的记录
12.Django内容整理
1.创建工程名:
django-admin startproject 工程名
2.创建APP(或多个)
cd 工程名
python mamage.py startapp cmdb
3.静态文件
project.settings.py
STATICFILES_DIRS = (
os.path.join(BASE_DIR,"static"),
)
4.模板路径
DIRS ==> [os.path.join(BASE_DIR,'templates'),]
5.settings中
middleware
# csrf
6.定义路由规则
url.py文件
"login" -->
7.定于视图函数
app下views.py文件
def func(request):
#request.method 用户提交方式 GET or POST
#request.GET.get('',None)
#request.POST.get('',None)
返回数据
return Httpresponse("字符串")
return render(request,'html模板路径')
return redirect('')
redirect不能填模板路径,因为跳转页面的时候不是后台做的,因为后台并不能获取跳转页面的模板文件,譬如www.baidu.com,而且在验证通过之后告诉客户端一个跳转的url,你在发一次请求到那个url过去,所以才跳转页面
注:如果是通过get方式提交数据,那么浏览器是通过http://127.0.0.1:8000/home?username=1231&password=4123方式传递username和password两个值的,在django端则是通过print(request.GET.get(‘username’))获取具体的key值
13.模板渲染
def func(request):
return render(request,"index.html",{'current_user':'alex'})
<html>
<body>
<div>{{current_user}}</div>
</body>
</html>
当请求到达视图函数,先把模板拿过来,然后发现特殊字符,将参数和特殊字符一渲染,渲染完成之后就会形成一串字符串,就是把alex替换到html中的current_user,然后将生成好的整个页面返回给用户
###############################################
for 循环
def func(request):
return render(request,"index.html",{'current_user':'alex','user_list':['alex','eric'])}
index.html
<html>
<body>
<div>{{current_user}}</div>
<ul>
{% for row in user_list %}
<li>{{ row }}</li>
{% endfor %}
</ul>
</body>
</html>
###############################################
索引
def func(request):
return render(request,"index.html",{'current_user':'alex','user_list':['alex','eric'],'user_dict':{'k1':'v1','k2':'v2'})}
index.html
<html>
<body>
<div>{{current_user}}</div>
<a>{{user_list.0}}</a>
<a>{{user_list.k1}}</a>
</body>
</html>
############################################
if else
def func(request):
return render(request,"index.html",{'current_user':'alex',"age":18,'user_list':['alex','eric'],'user_dict':{'k1':'v1','k2':'v2'})}
index.html
<html>
<body>
<div>{{current_user}}</div>
<a>{{user_list.0}}</a>
<a>{{user_list.k1}}</a>
{% if age >8 %}
<a>有年龄</a>
{% if age >17 %}
<a>老男人</a>
{% else %}
<a>小鲜肉</a>
{% endif %}
{% else %}
<a>无年龄</a>
{% endif %}
</body>
</html>