文章出處

Python自動化 【第十八篇】:JavaScript 正則表達式及Django初識

本節內容

  • JavaScript 正則表達式
  • Django初識

 

正則表達式

1、定義正則表達式

  • /.../  用于定義正則表達式
  • /.../g 表示全局匹配
  • /.../i 表示不區分大小寫
  • /.../m 表示多行匹配

    JS正則匹配時本身就是支持多行,此處多行匹配只是影響正則表達式^和$,m模式也會使用^$來匹配換行的內容)

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)
View Code

  注:定義正則表達式也可以  reg= new RegExp()

2、匹配

JavaScript中支持正則表達式,其主要提供了兩個功能:

  • test(string)     檢查字符串中是否和正則匹配
n = 'uui99sdf'
reg = /\d+/
reg.test(n)  ---> true
 
# 只要正則在字符串中存在就匹配,如果想要開頭和結尾匹配的話,就需要在正則前后加 ^和$
View Code
  • exec(string)    獲取正則表達式匹配的內容,如果未匹配,值為null,否則,獲取匹配成功的數組。
 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)
View Code

3、字符串中相關方法

1 obj.search(regexp)                   獲取索引位置,搜索整個字符串,返回匹配成功的第一個位置(g模式無效)
2 obj.match(regexp)                    獲取匹配內容,搜索整個字符串,獲取找到第一個匹配內容,如果正則是g模式找到全部
3 obj.replace(regexp, replacement)     替換匹配替換,正則中有g則替換所有,否則只替換第一個匹配項,
4                                         $數字:匹配的第n個組內容;
5                                           $&:當前匹配的內容;
6                                           $`:位于匹配子串左側的文本;
7                                           $':位于匹配子串右側的文本
8                                           $$:直接量$符號
View Code

 

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、數據庫

 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 }
View Code
1 # 由于Django內部連接MySQL時使用的是MySQLdb模塊,而python3中還無此模塊,所以需要使用pymysql來代替
2   
3 # 如下設置放置的與project同名的配置的 __init__.py文件中
4   
5 import pymysql
6 pymysql.install_as_MySQLdb() 
View Code

2、模版

TEMPLATE_DIRS = (
        os.path.join(BASE_DIR,'templates'),
    )
View Code

3、靜態文件

STATICFILES_DIRS = (
        os.path.join(BASE_DIR,'static'),
    )
View Code

 

路由系統

1、單一路由對應

url(r'^index$', views.index), 

2、基于正則的路由

url(r'^index/(\d*)', views.index),
url(r'^manage/(?P<name>\w*)/(?P<id>\d*)', views.manage),
View Code

3、添加額外的參數

 url(r'^manage/(?P<name>\w*)', views.manage,{'id':333}), 

4、為路由映射設置名稱

url(r'^home', views.home, name='h1'),
url(r'^index/(\d*)', views.index, name='h2'),
View Code

設置名稱之后,可以在不同的地方調用,如:

    • 模板中使用生成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 中獲取的數據插入到模版中,最后將信息返回給用戶。

def current_datetime(request):
    now = datetime.datetime.now()
    html = "<html><body>It is now %s.</body></html>" % now
    return HttpResponse(html)
View Code
from django import template
t = template.Template('My name is {{ name }}.')
c = template.Context({'name': 'Adrian'})
print t.render(c)
View Code
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
View Code
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)
View Code
return render_to_response('Account/Login.html',data,context_instance=RequestContext(request))
View Code

 

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

#!/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)
View Code

c、在使用自定義simple_tag的html文件中導入之前創建的 xx.py 文件名

 {% load xx %} 

d、使用simple_tag

{% my_simple_time 1 2 3%}
{% my_input 'id_username' 'hide'%}
View Code

e、在settings中配置當前app,不然django無法找到自定義的simple_tag  

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app01',
)
View Code

文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()