python自动化编程-第十八天
JavaScript正则表达式
test - 判断字符串是否符合规定的正则表达式
exec - 获取匹配的数据
/.../ 用于定义正则表达式
/.../g 表示全局匹配
/.../i 表示不区分大小写
/.../m 表示多行匹配
JS正则匹配时本身就是支持多行,此处多行匹配只是影响正则表达式和$,m模式也会使用$来匹配换行的内容)
var pattern = /^Java\w*/gm;
var text = "JavaScript is more fun than \nJavaEE or JavaBeans!";
result = pattern.exec(text)
result = pattern.exec(text)
result = pattern.exec(text)
则只匹配第一个数字,并且返回的是数组;
分组
'\bwang(\w+)\b' 表示匹配单词的词首和词尾
就会匹配2到个:
wang\w+
\w+
全局匹配
'\bwang(\w+)\b/g' /g表示是全局匹配,但是每次拿一个;没有匹配的时候,返回null;
多行匹配
/.../m 表示多行匹配
默认就是多行匹配;但是只是将其当做一行数据来匹配;
加上/m以后,将每行的开头(/n),作为字符串的开头去匹配
^$,
示例
text='JavaScript is more fun than Java or JavaBeans!'
rep = /\bJava(\w+)\b/
rep.exec(text)
(2) ["JavaScript", "Script", index: 0, input: "JavaScript is more fun than Java or JavaBeans!", groups: undefined]
text='JavaScript is more fun than Java or JavaBeans!'
"JavaScript is more fun than Java or JavaBeans!"
rep = /\bJava\w+\b/g
rep.exec(text)
["JavaScript", index: 0, input: "JavaScript is more fun than Java or JavaBeans!", groups: undefined]
rep.exec(text)
["JavaBeans", index: 36, input: "JavaScript is more fun than Java or JavaBeans!", groups: undefined]
rep.exec(text)
null
rep = /^Java(\w+)/gm
rep.exec(text)
(2) ["JavaScript", "Script", index: 0, input: "JavaScript is more fun than Java or JavaBeans!", groups: undefined]
rep.exec(text)
null
rep = /^Java(\w*)/gm
rep.exec(text)
(2) ["JavaScript", "Script", index: 0, input: "JavaScript is more fun than ↵Java or JavaBeans!", groups: undefined]
rep.exec(text)
(2) ["Java", "", index: 29, input: "JavaScript is more fun than ↵Java or JavaBeans!", groups: undefined]
rep.exec(text)
null
默认事件先执行:
input checkbox,
自定义事件先执行:
input submit ,a,
表单验证
JS:简单验证
各种验证
长度,密码一致性,是否符合文字要求 \w等
$(':submit').click(function () {
var flag = true;
$(":text,:password").each(function () {
……
return false
}
});
return flag;
})
后端:python实现
EsayUI
EasyUI官网
下载下来,看demo目录里面的东西,
ajax操作,学习代价太大
适合后台管理
jQueryUI
jQueryUI官网
下载下来,查看index
适合后台管理
BootStrap
css
js
主要使用的是3.0版本
适合全能型
响应式
@media (条件){
css样式
}
图标、字体
@font-face,图标都保存成字体了
直接copy官网上的标签即可
基本使用
在head标签中里面的所有样式是有优先级的;
因此如果想让自己的css永远为最后生效的,需要加上!important
.c1{
color:red; !important
}
web框架介绍
MVC
model view controller
数据库 模板文件 业务处理
MTV
model template view
数据库 模板文件 业务处理
Django就是mtv框架的;
Django
安装Django
pip3 install django
添加环境变量
Django创建工程
$ which django-admin
/Library/Frameworks/Python.framework/Versions/3.7/bin/django-admin
# chenzhuanglan @ chenzhuanglandeMacBook-Pro in ~ [12:10:11]
$ which django-admin.py
/Library/Frameworks/Python.framework/Versions/3.7/bin/django-admin.py
创建项目
# chenzhuanglan @ chenzhuanglandeMacBook-Pro in ~/OneDrive/learning/python/python_scripts/LearnPython/day18 [12:11:27]
$ django-admin startproject mysite
# chenzhuanglan @ chenzhuanglandeMacBook-Pro in ~/OneDrive/learning/python/python_scripts/LearnPython/day18 [12:11:40]
$ ls
bootstrap-3.3.7-dist mysite 响应式.html
bootstrap.html s1.html
jquery-easyui-1.5.5.4 web 框架
命令格式
djiango-admin startproject XXXX项目名称
开始运行
# chenzhuanglan @ chenzhuanglandeMacBook-Pro in ~/OneDrive/learning/python/python_scripts/LearnPython/day18 [12:11:42]
$ cd mysite
# chenzhuanglan @ chenzhuanglandeMacBook-Pro in ~/OneDrive/learning/python/python_scripts/LearnPython/day18/mysite [12:13:18]
$ ls
manage.py mysite
# chenzhuanglan @ chenzhuanglandeMacBook-Pro in ~/OneDrive/learning/python/python_scripts/LearnPython/day18/mysite [12:13:35]
$ python3 manage.py runserver
Performing system checks...
System check identified no issues (0 silenced).
You have 14 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
July 18, 2018 - 04:13:47
Django version 2.0.7, using settings 'mysite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
启动服务命令格式
python3 manage.py runserver 127.0.0.1:8001
jdango目录结构
# chenzhuanglan @ chenzhuanglandeMacBook-Pro in ~/OneDrive/learning/python/python_scripts/LearnPython/day18 [12:27:39]
$ tree mysite
mysite
├── db.sqlite3
├── manage.py # 管理Django程序
└── mysite #对整个程序进行配置
├── __init__.py
├── settings.py #配置文件
├── urls.py #URL对应关系
└── wsgi.py # 遵循wsgi规范,提供scoket服务,uwsgi+nginx
注意:urls.py文件中的urlpatterns数据中的url中,如果匹配的字符串右边不带/,则再写HTML时,跳转的url中右边不需要带/;保持一致即可;
管理命令:
python3 manage.py
python3 manage.py startapp xx
python3 manage.py makemigrations
python3 manage.py migrate
抽屉
- 抽屉
- 配置
- 主站 app
- 后台管理 app
创建app
python manage.py startapp xxxxapp名
创建完成后,将 业务处理函数 放置在app目录下的views文件中;
cmdb
├── __init__.py
├── admin.py # django为我们提供的后台管理
├── apps.py # 配置当前app
├── migrations # 数据库操作记录的目录,仅限表结构
│ └── __init__.py
├── models.py # 创建数据库表/orm 写指定类,通过命令可以创建数据库结构
├── tests.py # 测试目录
└── views.py # 业务逻辑代码
配置
配置模板的路径
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
# render的默认路径,有了DIRS就不用再写模板的具体路径了
'DIRS': [os.path.join(BASE_DIR,'templates')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
配置静态目录
所有静态文件的处理在settings中,在
STATIC_URL = '/static/'
# 添加如下内容,所有css和js文件都放在static的目录中;
STATICFILES_DIRS =(
os.path.join(BASE_DIR,'static'),
)
urls.py文件中url的字符串中,最后如果没有/,那么form表单中的action也不要加/
内容整理
创建django工程
django-admin startproject 工程名
创建app
cd 工程名
python manage.py startapp cmdb
静态文件
project.settings.py
STATICFILES_DIRS = (
os.path.join(BASE_DIR,'static'),
)
模板路径
DIRS ==》[os.path.join(BASE_DIR,'templates'),]
settings中
middlerware
#注释 csrf
定义路由规则
urls.py
"login" --》函数名
可以定义app的urls路径
在工程名下的urls.py中配置 re_path(r"cmdb/",include("app01.urls")),
在app01的app目录下,拷贝urls.py文件,修改urloatterns;
urlpatterns = [
path('login', views.login),
path('orm', views.orm),
path('index', views.index),
path('user_info', views.user_info),
path('user_group', views.user_group),
re_path(r'userdetail-(?P\d+)',views.user_detail),
re_path(r'userdel-(?P\d+)',views.user_del),
re_path(r'useredit-(?P\d+)',views.user_edit),
]
定义视图函数
app下views.py
def func(request):
request.method GET/POST
https://127.0.0.1:8000/home?nid=123&name=alex
request.GET.get("",None) #获取请求发来的数据
request.POST.get("",None)
return HttpResponse('字符串')
return render(request,'html模板路径')
return redirect('/url的路径') #只能填url,前面的/代表域名
模板渲染
特殊的模板语言
for循环中,在取值时使用索引取值,列表就是使用数字,.0,.1,.2等
判断
{% if age %}
有年龄
{% if age > 16 %}
xxx
{% elif age > 30 and age < 100 %}
{% endif %}
{% else %}
无年龄
{% endif %}