課堂筆記:html
day60 2018-04-27 1. 今日內容 1. 歸納 1. 98%的時間都是在寫例子 幫你理解Django --> 由咱們寫的例子對比理解Django框架 2. 安裝Django 2. 寫例子 用戶的瀏覽器(socket客戶端) 3. 客戶端往服務端發消息 6. 客戶端接收消息 7. 關閉 JD的服務器(socket服務端) 1. 啓動,監聽 2. 等待客戶端鏈接 4. 服務端收消息 5. 服務端回消息 7. 關閉 FTP做業: FTP客戶端: PUT,1024.avi,2048 FTP服務端: .split("|") 瀏覽器和服務端通訊都要遵循一個HTTP協議(消息的格式要求). 關於HTTP協議: 1. 瀏覽器往服務端發的叫 請求(request) 請求的消息格式: 請求方法 路徑 HTTP/1.1\r\n k1:v1\r\n k2:v2\r\n \r\n 請求數據 2. 服務端往瀏覽器發的叫 響應(response) 響應的消息格式: HTTP/1.1 狀態碼 狀態描述符\r\n k1:v1\r\n k2:v2\r\n \r\n 響應正文 <-- html的內容 動態的網頁: 本質上都是字符串的替換 字符串替換髮生在什麼地方: 在服務端替換完再返回給瀏覽器!!! 總結一下: 1. web框架的本質: socket服務端 與 瀏覽器的通訊 2. socket服務端功能劃分: a. 負責與瀏覽器收發消息(socket通訊) --> wsgiref/uWsgi/gunicorn... b. 根據用戶訪問不一樣的路徑執行不一樣的函數 c. 從HTML讀取出內容,而且完成字符串的替換 --> jinja2(模板語言) 3. Python中 Web框架的分類: 1. 按上面三個功能劃分: 1. 框架自帶a,b,c --> Tornado 2. 框架自帶b和c,使用第三方的a --> Django 3. 框架自帶b,使用第三方的a和c --> Flask 2. 按另外一個維度來劃分: 1. Django --> 大而全(你作一個網站能用到的它都有) 2. 其餘 --> Flask 輕量級 3. 新建Django項目 命令行建立: django-admin startproject mysite pycharm建立: 1. File --> New project --> 左側選Django --> 右側填項目路徑,而且勾選python.exe 4. 設置Django項目: 1. settings.py 1. 配置HTML文件存放的位置 2. 配置靜態文件存放的位置 2. 做業 1. 用Django框架把咱們以前寫過登陸的頁面返回給瀏覽器
不完善的服務端實例:python
# -*- coding: utf-8 -*- ''' 不完善的web服務端實例 ''' import socket # 生成socket對象 sk = socket.socket() # 綁定ip和端口 sk.bind(('127.0.0.1', 8001)) # 監聽 sk.listen() # 寫一個死循環,一直等待客戶端的連接 while 1: # 獲取與客戶端的連接 conn ,_ = sk.accept() # 接收客戶端發來的消息 data = conn.recv(8096) print(data) # 給客戶端回覆消息 conn.send(b'http/1.1 200 OK\r\ncontent-type:text/html; charset=utf-8\r\n\r\n') # 想讓瀏覽器再頁面上顯示出來的內容都是響應正文 conn.send(b'<h1>hello world</h1>') # 關閉 conn.close() sk.close()
瀏覽器輸入 http://127.0.0.1:8001/ web
根據路徑返回不一樣的頁面django
# -*- coding: utf-8 -*- ''' 不完善的web服務端實例 ''' import socket # 生成socket對象 sk = socket.socket() # 綁定ip和端口 sk.bind(('127.0.0.1', 8001)) # 監聽 sk.listen() # 定義處理yimi的函數 def yimi(url): with open('haiyan.html', 'rb') as f: res = f.read() return res # 定義處理yimi的函數 def xiaohei(url): with open('xiaohei.html', 'rb') as f: ret = f.read() return ret # 定義一個處理404的 def f404(url): res = '你訪問的地址{}找不到'.format(url) return bytes(res, encoding='utf-8') url_func = [ ('/yimi/', yimi), ('/xiaohei/', xiaohei), ] # 寫一個死循環,一直等待客戶端的連接 while 1: # 獲取與客戶端的連接 conn, _ = sk.accept() # 接收客戶端發來的消息 data = conn.recv(8096) data_str = str(data, encoding='utf-8') print(data_str) # 用回車換行來切分紅數組 l1 = data_str.split('\r\n') l2 = l1[0].split() url = l2[1] print(data) # 給客戶端回覆消息 conn.send(b'http/1.1 200 OK\r\ncontent-type:text/html; charset=utf-8\r\n\r\n') # 想讓瀏覽器再頁面上顯示出來的內容都是響應正文 for i in url_func: if i[0] == url: func = i[1] break else: func = f404 response = func(url) conn.send(response) # 關閉 conn.close()
兩個html代碼片斷:第一個名字是 haiyan.html 第二個名字是:xiaohei.html數組
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>海燕</title> </head> <body> <h1>web 框架本質是什麼鬼002啦啦啦</h1> <p>海燕blablabla</p> <p>恩,其實這裏已是本質了呢</p> </body> </html>
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>小黑</title> </head> <body> <h1>web 框架本質是什麼鬼002啦啦啦</h1> <p>這裏是小黑</p> <p>恩,其實這裏已是本質了呢</p> </body> </html>
兩個正確的url地址:http://127.0.0.1:8001/xiaohei/ http://127.0.0.1:8001/yimi/瀏覽器
1105 day60 結束 學習了,django項目目錄的分類, 頁面都放在templates下, static文件新設置一個目錄,加了配置才能對應起來 BASE_DIR是項目的根目錄 urls.py是區分設置根據路徑區分網頁的地方 cmd 進入到項目目錄後 python mange.py runserver 8001 默認是8000端口號 的方式來啓動項目