day_18 正則及Django

一、 正則表達式

1、定義正則表達式

  • /.../  用於定義正則表達式

  • /.../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)

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

 2、匹配

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

  • test(string)     檢查字符串中是否和正則匹配

rep = /\d+/;
rep.test("asdfoiklfasdf89asdfasdf")# true
        rep = /^\d+$/;
rep.test("123456789")# true

# 只要正則在字符串中存在就匹配,如果想要開頭和結尾匹配的話,就需要在正則前後加 ^和$

  • exec(string)    獲取正則表達式匹配的內容,如果未匹配,值爲null,否則,獲取匹配成功的數組。

獲取正則表達式匹配的內容,如果未匹配,值爲null,否則,獲取匹配成功的數組。
 
非全局模式
    獲取匹配結果數組,注意:第一個元素是第一個匹配的結果,後面元素是正則子匹配(正則內容分組匹配)
    var pattern = /\bJava\w*\b/;
    var text = "JavaScript is more fun than Java or JavaBeans!";
    result = pattern.exec(text)
 
    var pattern = /\b(Java)\w*\b/;
    var text = "JavaScript is more fun than Java or JavaBeans!";
    result = pattern.exec(text)
 
全局模式
    需要反覆調用exec方法,來一個一個獲取結果,直到匹配獲取結果爲null表示獲取完畢
    var pattern = /\bJava\w*\b/g;
    var text = "JavaScript is more fun than Java or JavaBeans!";
    result = pattern.exec(text)
 
    var pattern = /\b(Java)\w*\b/g;
    var text = "JavaScript is more fun than Java or JavaBeans!";
    result = pattern.exec(text)

字符串中相關方法

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

二、登錄註冊驗證

默認事件先執行:
            checkbox
        自定義先執行
            a
            submit
            ...
        <form>
            
            <input type='type' />
            <input type='password' />
            <input type='submit' />
            
        </form>
   
        $(':submit').click(function(){
            
            $(':text,:password').each(function(){
                ...                return false;
            })            return false;
        })   
   
        input,checbox
   
    ================================== 驗證 ================================
    JS: 驗證
         
         各種驗證
         
            $(':submit').click(function(){
                
                $(':text,:password').each(function(){
                    ...                    return false;
                })                return false;
            })

三、組件

1.BootStrap

下載:http://www.bootcss.com/

學習 BootStrap 規則
  一、響應式
    @media

例:響應式佈局

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .c1{
            background-color: red;
            height: 50px;
        }
        @media (min-width: 700px) {
            .c2{
            background-color: grey;
        }
        }
    </style>
</head>
<body>
    <div class="c1 c2"></div>
</body>
</html>

二、圖標、字體
    @font-face
  三、基本使用

加個最先應用的格式

<style>
        .no-redus{
                border-radius: 0px; !important;
        }
    </style>

2.jQUeryUI *

下載:http://jqueryui.com/

3.EasyUI

下載:http://www.jeasyui.net/

修改css並應用

4.jquery.bxslider輪播圖

http://bxslider.com/ 下載引用

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="jquery.bxslider/jquery.bxslider.css">
</head>
<body>
<ul class="bxslider">
  <li><img src="image/1.png"  style="width: 500px;height: 200px;"/></li>
  <li><img src="image/1.png"  style="width: 500px"/></li>
  <li><img src="image/1.png"  style="width: 500px"/></li>
</ul>

<script src="js/jquery-1.12.4.js"></script>
<script src="jquery.bxslider/jquery.bxslider.js"></script>
<script>
    $(document).ready(function(){
        $('.bxslider').bxSlider();
    });
</script>
</body>
</html>

 四、web框架

 MVC

Model View Controller
數據庫   模板文件    業務處理

MTV

Model    Template     View
數據庫   模板文件    業務處理

############## WEB:MVC、MTV

 Web框架本質

 衆所周知,對於所有的Web應用,本質上其實就是一個socket服務端,用戶的瀏覽器其實就是一個socket客戶端。

#!/usr/bin/env python#coding:utf-8
  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(socket.AF_INET, socket.SOCK_STREAM)
    sock.bind(('localhost',8000))
    sock.listen(5)  
    while True:
        connection, address = sock.accept()
        handle_request(connection)
        connection.close()  
if __name__ == '__main__':
    main()

上述通過socket來實現了其本質,而對於真實開發中的python web程序來說,一般會分爲兩部分:服務器程序和應用程序。服務器程序負責對socket服務器進行封裝,並在請求到來時,對請求的各種數據進行整理。應用程序則負責具體的邏輯處理。爲了方便應用程序的開發,就出現了衆多的Web框架,例如:Django、Flask、web.py 等。不同的框架有不同的開發方式,但是無論如何,開發出的應用程序都要和服務器程序配合,才能爲用戶提供服務。這樣,服務器程序就需要爲不同的框架提供不同的支持。這樣混亂的局面無論對於服務器還是框架,都是不好的。對服務器來說,需要支持各種不同框架,對框架來說,只有支持它的服務器才能被開發出的應用使用。這時候,標準化就變得尤爲重要。我們可以設立一個標準,只要服務器程序支持這個標準,框架也支持這個標準,那麼他們就可以配合使用。一旦標準確定,雙方各自實現。這樣,服務器可以支持更多支持標準的框架,框架也可以使用更多支持標準的服務器。

WSGI(Web Server Gateway Interface)是一種規範,它定義了使用python編寫的web app與web server之間接口格式,實現web app與web server間的解耦。

python標準庫提供的獨立WSGI服務器稱爲wsgiref。

#!/usr/bin/env python#coding:utf-8
 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>'.encode('utf-8'),]
 if __name__ == '__main__':
    httpd = make_server('', 8000, RunServer)    print "Serving HTTP on port 8000..."
    httpd.serve_forever()

五、Django

 1.安裝

pip3 install django

2.創建Django工程

django-admin startproject 【工程名稱】

例如:工程名稱爲mysite;那麼mysite目錄下會產生如下目錄及文件。

mysite
  - mysite        # 對整個程序進行配置
    - init
    - settings  # 配置文件
    - url         # URL對應關係
    - wsgi      # 遵循WSIG規範,uwsgi + nginx
  - manage.py  # 管理Django程序:
    - python manage.py
    - python manage.py startapp xx
    - python manage.py makemigrations
    - python manage.py migrate

Bottle默認支持多種基於WSGI的服務,如:

server_names = {
    'cgi': CGIServer,
    'flup': FlupFCGIServer,
    'wsgiref': WSGIRefServer,
    'waitress': WaitressServer,
    'cherrypy': CherryPyServer,
    'paste': PasteServer,
    'fapws3': FapwsServer,
    'tornado': TornadoServer,
    'gae': AppEngineServer,
    'twisted': TwistedServer,
    'diesel': DieselServer,
    'meinheld': MeinheldServer,
    'gunicorn': GunicornServer,
    'eventlet': EventletServer,
    'gevent': GeventServer,
    'geventSocketIO':GeventSocketIOServer,
    'rocket': RocketServer,
    'bjoern' : BjoernServer,
    'auto': AutoServer,
}

3.運行Django功能

語法:python manage.py runserver ip:port

python manage.py runserver 127.0.0.1:8001

4.創建APP

python manage.py startapp cmdb

- migrations 數據修改表結構

- admin Django爲我們提供的後臺管理

- apps 配置當前app

- models ORM,寫指定的類 通過命令可以創建數據庫結構

- tests 單元測試

- views 業務代碼

示例:表單驗證



內容整理

1. 創建Django工程
            django-admin startproject 工程名

    2. 創建APP
        cd 工程名
        python manage.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中
        
        middlerware        
            # 註釋 csrf
            
            
    6、定義路由規則
        url.py        
            "login" --> 函數名
            
    7、定義視圖函數
        app下views.py            
            def func(request):                # request.method   GET / POST
                
                # http://127.0.0.1:8009/home?nid=123&name=alex
                # request.GET.get('',None)   # 獲取請求發來的而數據
                
                # request.POST.get('',None)
                
                
                # return HttpResponse("字符串")
                # return render(request, "HTML模板的路徑")
                # return redirect('/只能填URL')
                
    8、模板渲染
        特殊的模板語言
        
            -- {{ 變量名 }}        
                def func(request):                    return render(request, "index.html", {'current_user': "alex"})
        
                    
                index.html
                
                <html>
                ..
                    <body>
                        <div>`current_user`</div>
                    </body>
                
                </html>
                
                ====> 最後生成的字符串
                
                <html>
                ..
                    <body>
                        <div>alex</div>
                    </body>
                
                </html>
            -- 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 %}
                            
                                {% if row == "alex" %}
                                    <li>{{ row }}</li>
                                {% endif %}
                                
                            {% 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.1 }} </a>
                        <a> {{ user_dict.k1 }} </a>
                        <a> {{ user_dict.k2 }} </a>
                        
                    </body>
                
                </html>            
            ###### 條件
            
                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.1 }} </a>
                        <a> {{ user_dict.k1 }} </a>
                        <a> {{ user_dict.k2 }} </a>
                        
                        {% if age %}
                            <a>有年齡</a>
                            {% if age > 16 %}
                                <a>老男人</a>
                            {% else %}
                                <a>小鮮肉</a>
                            {% endif %}
                        {% else %}
                            <a>無年齡</a>
                        {% endif %}
                    </body>
                
                </html>


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章