Python自動化 【第十八篇】:JavaScript 正則表達式及Django初識
本節內容
- JavaScript 正則表達式
- Django初識
正則表達式
1、定義正則表達式
- /.../ 用于定義正則表達式
- /.../g 表示全局匹配
- /.../i 表示不區分大小寫
- /.../m 表示多行匹配
JS正則匹配時本身就是支持多行,此處多行匹配只是影響正則表達式^和$,m模式也會使用^$來匹配換行的內容)
![](https://imageproxy.pixnet.cc/imgproxy?url=https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://imageproxy.pixnet.cc/imgproxy?url=https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
1 var pattern = /^Java\w*/gm; 2 var text = "JavaScript is more fun than \nJavaEE or JavaBeans!"; 3 result = pattern.exec(text) 4 result = pattern.exec(text) 5 result = pattern.exec(text)
注:定義正則表達式也可以 reg= new RegExp()
2、匹配
JavaScript中支持正則表達式,其主要提供了兩個功能:
- test(string) 檢查字符串中是否和正則匹配
![](https://imageproxy.pixnet.cc/imgproxy?url=https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://imageproxy.pixnet.cc/imgproxy?url=https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
n = 'uui99sdf' reg = /\d+/ reg.test(n) ---> true # 只要正則在字符串中存在就匹配,如果想要開頭和結尾匹配的話,就需要在正則前后加 ^和$
- exec(string) 獲取正則表達式匹配的內容,如果未匹配,值為null,否則,獲取匹配成功的數組。
![](https://imageproxy.pixnet.cc/imgproxy?url=https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://imageproxy.pixnet.cc/imgproxy?url=https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
1 獲取正則表達式匹配的內容,如果未匹配,值為null,否則,獲取匹配成功的數組。 2 3 非全局模式 4 獲取匹配結果數組,注意:第一個元素是第一個匹配的結果,后面元素是正則子匹配(正則內容分組匹配) 5 var pattern = /\bJava\w*\b/; 6 var text = "JavaScript is more fun than Java or JavaBeans!"; 7 result = pattern.exec(text) 8 9 var pattern = /\b(Java)\w*\b/; 10 var text = "JavaScript is more fun than Java or JavaBeans!"; 11 result = pattern.exec(text) 12 13 全局模式 14 需要反復調用exec方法,來一個一個獲取結果,直到匹配獲取結果為null表示獲取完畢 15 var pattern = /\bJava\w*\b/g; 16 var text = "JavaScript is more fun than Java or JavaBeans!"; 17 result = pattern.exec(text) 18 19 var pattern = /\b(Java)\w*\b/g; 20 var text = "JavaScript is more fun than Java or JavaBeans!"; 21 result = pattern.exec(text)
3、字符串中相關方法
![](https://imageproxy.pixnet.cc/imgproxy?url=https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://imageproxy.pixnet.cc/imgproxy?url=https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
1 obj.search(regexp) 獲取索引位置,搜索整個字符串,返回匹配成功的第一個位置(g模式無效) 2 obj.match(regexp) 獲取匹配內容,搜索整個字符串,獲取找到第一個匹配內容,如果正則是g模式找到全部 3 obj.replace(regexp, replacement) 替換匹配替換,正則中有g則替換所有,否則只替換第一個匹配項, 4 $數字:匹配的第n個組內容; 5 $&:當前匹配的內容; 6 $`:位于匹配子串左側的文本; 7 $':位于匹配子串右側的文本 8 $$:直接量$符號
Django初識
基本配置
一、創建django程序
-
- 終端命令:django-admin startproject sitename
- IDE創建Django程序時,本質上都是自動執行上述命令
其他常用命令:
python manage.py runserver 0.0.0.0
python manage.py startapp appname
python manage.py syncdb
python manage.py makemigrations
python manage.py migrate
python manage.py createsuperuser
二、程序目錄
三、配置文件
1、數據庫
![](https://imageproxy.pixnet.cc/imgproxy?url=https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://imageproxy.pixnet.cc/imgproxy?url=https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
1 DATABASES = { 2 'default': { 3 'ENGINE': 'django.db.backends.mysql', 4 'NAME':'dbname', 5 'USER': 'root', 6 'PASSWORD': 'xxx', 7 'HOST': '', 8 'PORT': '', 9 } 10 }
![](https://imageproxy.pixnet.cc/imgproxy?url=https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://imageproxy.pixnet.cc/imgproxy?url=https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
1 # 由于Django內部連接MySQL時使用的是MySQLdb模塊,而python3中還無此模塊,所以需要使用pymysql來代替 2 3 # 如下設置放置的與project同名的配置的 __init__.py文件中 4 5 import pymysql 6 pymysql.install_as_MySQLdb()
2、模版
![](https://imageproxy.pixnet.cc/imgproxy?url=https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://imageproxy.pixnet.cc/imgproxy?url=https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
TEMPLATE_DIRS = ( os.path.join(BASE_DIR,'templates'), )
3、靜態文件
![](https://imageproxy.pixnet.cc/imgproxy?url=https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://imageproxy.pixnet.cc/imgproxy?url=https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
STATICFILES_DIRS = ( os.path.join(BASE_DIR,'static'), )
路由系統
1、單一路由對應
url(r'^index$', views.index),
2、基于正則的路由
![](https://imageproxy.pixnet.cc/imgproxy?url=https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://imageproxy.pixnet.cc/imgproxy?url=https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
url(r'^index/(\d*)', views.index), url(r'^manage/(?P<name>\w*)/(?P<id>\d*)', views.manage),
3、添加額外的參數
url(r'^manage/(?P<name>\w*)', views.manage,{'id':333}),
4、為路由映射設置名稱
![](https://imageproxy.pixnet.cc/imgproxy?url=https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://imageproxy.pixnet.cc/imgproxy?url=https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
url(r'^home', views.home, name='h1'), url(r'^index/(\d*)', views.index, name='h2'),
設置名稱之后,可以在不同的地方調用,如:
-
- 模板中使用生成URL {% url 'h2' 2012 %}
- 函數中使用生成URL reverse('h2', args=(2012,)) 路徑:django.urls.reverse
- Model中使用獲取URL 自定義get_absolute_url() 方法
5、根據app對路由規則進行分類
url(r'^web/',include('web.urls')),
django中的路由系統和其他語言的框架有所不同,在django中每一個請求的url都要有一條路由映射,這樣才能將請求交給對一個的view中的函數去處理。其他大部分的Web框架則是對一類的url請求做一條路由映射,從而是路由系統變得簡潔。
通過反射機制,為django開發一套動態的路由系統Demo: 點擊下載
模板
1、模版的執行
模版的創建過程,對于模版,其實就是讀取模版(其中嵌套著模版標簽),然后將 Model 中獲取的數據插入到模版中,最后將信息返回給用戶。
![](https://imageproxy.pixnet.cc/imgproxy?url=https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://imageproxy.pixnet.cc/imgproxy?url=https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
def current_datetime(request): now = datetime.datetime.now() html = "<html><body>It is now %s.</body></html>" % now return HttpResponse(html)
![](https://imageproxy.pixnet.cc/imgproxy?url=https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://imageproxy.pixnet.cc/imgproxy?url=https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
from django import template t = template.Template('My name is {{ name }}.') c = template.Context({'name': 'Adrian'}) print t.render(c)
![](https://imageproxy.pixnet.cc/imgproxy?url=https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://imageproxy.pixnet.cc/imgproxy?url=https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
import datetime from django import template import DjangoDemo.settings now = datetime.datetime.now() fp = open(settings.BASE_DIR+'/templates/Home/Index.html') t = template.Template(fp.read()) fp.close() html = t.render(template.Context({'current_date': now})) return HttpResponse(html
![](https://imageproxy.pixnet.cc/imgproxy?url=https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://imageproxy.pixnet.cc/imgproxy?url=https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
from django.template.loader import get_template from django.template import Context from django.http import HttpResponse import datetime def current_datetime(request): now = datetime.datetime.now() t = get_template('current_datetime.html') html = t.render(Context({'current_date': now})) return HttpResponse(html)
![](https://imageproxy.pixnet.cc/imgproxy?url=https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://imageproxy.pixnet.cc/imgproxy?url=https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
return render_to_response('Account/Login.html',data,context_instance=RequestContext(request))
2、模版語言
模板中也有自己的語言,該語言可以實現數據展示
-
- {{ item }}
- {% for item in item_list %} <a>{{ item }}</a> {% endfor %}
forloop.counter
forloop.first
forloop.last - {% if ordered_warranty %} {% else %} {% endif %}
- 母板:{% block title %}{% endblock %}
子板:{% extends "base.html" %}
{% block title %}{% endblock %} - 幫助方法:
{{ item.event_start|date:"Y-m-d H:i:s"}}
{{ bio|truncatewords:"30" }}
{{ my_list|first|upper }}
{{ name|lower }}
3、自定義simple_tag
a、在app中創建templatetags模塊
b、創建任意 .py 文件,如:xx.py
![](https://imageproxy.pixnet.cc/imgproxy?url=https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://imageproxy.pixnet.cc/imgproxy?url=https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
#!/usr/bin/env python #coding:utf-8 from django import template from django.utils.safestring import mark_safe register = template.Library() @register.simple_tag def my_simple_time(v1,v2,v3): return v1 + v2 + v3 @register.simple_tag def my_input(id,arg): result = "<input type='text' id='%s' class='%s' />" %(id,arg,) return mark_safe(result)
c、在使用自定義simple_tag的html文件中導入之前創建的 xx.py 文件名
{% load xx %}
d、使用simple_tag
![](https://imageproxy.pixnet.cc/imgproxy?url=https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://imageproxy.pixnet.cc/imgproxy?url=https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
{% my_simple_time 1 2 3%} {% my_input 'id_username' 'hide'%}
e、在settings中配置當前app,不然django無法找到自定義的simple_tag
![](https://imageproxy.pixnet.cc/imgproxy?url=https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://imageproxy.pixnet.cc/imgproxy?url=https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
INSTALLED_APPS = ( 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'app01', )
文章列表