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 %}