[TOC]
>[success] # 簡單入門
>[danger] ##### 網址的組成
~~~
1.協議 http,https 其中 https 是http加密協議
2.主機 baidu.com kancloud.cn 之類的網址
3.端口 HTTP 協議默認80, 因此一般不用填寫
4.路徑 主機后面用 [/] 分割的就是路徑
~~~
>[danger] ##### ip和域名
~~~
1.電腦通信是靠IP地址,ip由于繁瑣不容易記住,誕生了域名
2.電腦想DNS 服務器查新域名對應IP
3.win 查詢對應ip 指令ping 主機名
~~~

>[danger] ##### 什么是端口
~~~
1.廣為流傳的比喻,ip相當于你寫信的地址,端口相當于收信人
2.端口是一個16位數字,范圍在0-65535 也就是2**16
~~~
>[danger] ##### HTTP協議
~~~
1.一種傳輸協議,雙方都要遵守規范
2.由于收發的是文本信息,所以叫超文本傳輸協議
3.瀏覽器(客戶端)按照規定的格式發送文本數據請求到服務器
4.服務器去響應請求,按照規定格式返回文本數據到瀏覽器
5.瀏覽器去解析處理得到的數據
~~~
>[danger] ##### HTTP請求和響應
~~~
1.請求行或者響應行
2.Header
3.\r\n\r\n ,連續兩個回車符,用來分割Header 和Body
4.Body
~~~
<hr/>
* 解釋說明 請求 -- request

~~~
原始數據:
1.GET / HTTP/1.1\r\nhost:www.baidu.com\r\n\r\n
打印數據:
1.請求行: GET / HTTP/1.1
2.請求頭: Host: www.baidu.com
解釋:
1.GET 是請求方式
2./是請求路徑
3.HTTP/1.1 中,1.1是版本號
~~~
<hr/>
* 解釋說明 響應 -- respnse

~~~
1.響應行:HTTP/1.1 200 OK
2.響應頭:Content-Length: 218
Content-Type: text/html; charset=UTF-8
~~~
>[success] # 利用socket 客戶端和服務器
>[danger] ##### 客戶端 client.py
~~~
1.創建一個socket對象
2.創建主機和域名
3.連接主機
4.發送 HTTP 請求給服務器,發送要以bytes 字節類型
5.服務器會響應數據,響應的數據也是bytes 字節類型
6.如果頁面 有一些src 便簽屬性的時候,客戶端會接著在去請求服務器,獲取
~~~
~~~
import socket
# 創建一個 socket 對象
# 參數 socket.AF_INET 表示是 ipv4 協議
# 參數 socket.SOCK_STREAM 表示是 tcp 協議
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 這兩個其實是默認值, 所以你可以不寫, 如下
# s = socket.socket()
# 如果是https 協議
# s = ssl.wrap_socket(socket.socket())
# 主機(域名或者ip)和端口
host = 'g.cn'
port = 80
# 用 connect 函數連接上主機, 參數是一個 tuple
s.connect((host, port))
# 連接上后, 可以通過這個函數得到本機的 ip 和端口
ip, port = s.getsockname()
print('本機 ip 和 port {} {}'.format(ip, port))
# 構造一個 HTTP 請求
http_request = 'GET / HTTP/1.1\r\nhost:{}\r\n\r\n'.format(host)
# 發送 HTTP 請求給服務器
# send 函數只接受 bytes 作為參數
# str.encode 把 str 轉換為 bytes, 編碼是 utf-8
request = http_request.encode('utf-8')
print('請求', request)
s.send(request)
# 接受服務器的響應數據
# 參數是長度, 這里為 1023 字節
# 所以這里如果服務器返回的數據中超過 1023 的部分你就得不到了
response = s.recv(1023)
# 輸出響應的數據, bytes 類型
print('響應', response)
# 轉成 str 再輸出
print('響應的 str 格式', response.decode('utf-8'))
~~~

>[danger] 服務端-- server.py
~~~
1.創建一個服務器host,和端口,不填默認本地host
2.把host 和端口綁定
3.循環監聽,當有請求的時候執行s.accept(),沒有的時候就卡住
4.構造一個字節按照響應的格式 返回個客戶端
~~~
~~~
import socket
# 運行這個程序后, 瀏覽器打開 localhost:2000 就能訪問了
# 服務器的 host 為空字符串, 表示接受任意 ip 地址的連接
# post 是端口, 這里設置為 2000, 隨便選的一個數字
host = ''
port = 2000
# s 是一個 socket 實例
s = socket.socket()
# s.bind 用于綁定
# 注意 bind 函數的參數是一個 tuple,綁定服務器和端口
s.bind((host, port))
# 用一個無限循環來處理請求
while True:
# 套路, 先要 s.listen 開始監聽
s.listen(5)
# 當有客戶端過來連接的時候, s.accept 函數就會返回 2 個值
# 分別是 連接 和 客戶端 ip 地址
connection, address = s.accept()
# recv 可以接收客戶端發送過來的數據
# 參數是要接收的字節數
# 返回值是一個 bytes 類型
# 取出所有數據
buffer_size = 1000
r = b''
while True:
request = connection.recv(buffer_size)
r +=request
if len(request)<buffer_size:
break
# bytes 類型調用 decode('utf-8') 來轉成一個字符串(str)
print('ip and request, {}\n{}'.format(address, request.decode('utf-8')))
# b'' 表示這是一個 bytes 對象,構造的響應信息格式
response = b'HTTP/1.1 200 OK\r\n\r\n<h1>Hello World!</h1>'
# 用 sendall 發送給客戶端
connection.sendall(response)
# 發送完畢后, 關閉本次連接
connection.close()
~~~
>[success] # 解碼和編碼

- 網絡原理
- 為搭建框架做準備
- 簡單認識網路
- 自定義模擬網站案例
- 優化最終框架
- 數據存儲 -- data
- 用戶個人信息存儲 -- User.txt
- 路由映射 -- routes
- 處理用戶信息 -- routes_static.py
- 保存靜態文件 -- static
- templates -- html 集中處理模塊
- 首頁 -- index.html
- 登陸 -- login.html
- 用戶注冊頁面 -- register
- 日志模塊 -- log.gua.txt
- 啟動文件--server.py
- orm處理 -- model.py
- 日志模塊 -- utils.py
- 兩種數據庫類型
- 傳統數據庫了解篇
- 前端快速入門
- JS簡單使用入門
- css簡單快速入門
- DJANGO
- virtualenv-創建虛擬環境
- 項目結構
- django-admin中文配置
- django-打印sql語句
- django-基礎
- 認識MVC和MTV
- Django--初識
- Django--初識案例
- Django-FBV/CBV
- Django--常用input 交互
- Django-url
- Django-url.py 配置
- Django-include 使用
- Django-url name
- Django-ORM
- ORM-數據庫配置
- ORM-model字段
- ORM-model字段解釋
- ORM-字段選項
- ORM-查詢
- ORM-四種常用查詢方法
- ORM-三種獲取數據
- ORM-其他查詢方式
- ORM-條件查詢雙線
- ORM-Q和F條件使用
- ORM-三種數據庫交互
- 案例 -- 一對多
- ORM-技巧/常見問題
- ORM-N+1 問題
- ORM-并發的處理
- ORM-數量查詢、
- ORM-正向反向查詢
- ORM-基礎案例一
- ORM-基礎一對多案例
- Django-templates
- Django-模板的繼承
- Django-模板的過濾
- Django-自定義模板的過濾
- Django-cookie
- Django-cookies 裝飾器
- Djang-session
- Django-CSRF
- Django-中間件 -- 后續了解
- Django- 緩存 -- 沒有深入了解
- Django-form
- From-ajax
- form-內部驗證處理
- form-屬性
- form-常用的標簽字段
- form-常用的下拉和選擇
- form-widget速查
- Django-ajax序列化
- Django-多種ajax寫法
- ajax-原生寫法
- ajax-$寫法
- ajax-ifram
- Django-ajax圖片上傳
- ajax-原始寫法
- ajax-正常寫法
- iframe+form
- 實戰寫法
- Django-常用自編寫組件
- Django-雙菜單組合搜索
- Django - 多菜單組合搜索
- Django-分頁
- django-綜合基礎
- 綜合基礎-render
- django-admin
- admin-頁面配置
- admin-字段配置
- admin-編輯頁面
- admin-forms驗證
- admin-創建抽象類
- django-驗證碼
- 驗證碼-第三方生成庫
- 驗證碼-view.py使用
- 驗證碼-注意引入Monaco.ttf
- django-用戶注冊
- 注冊-form 模塊
- 注冊-views 模塊
- 注冊-html模塊
- 注冊-model模塊
- django-用戶登錄三種
- session登錄
- form-session 寫法
- view-寫法
- Html-寫法
- model-寫法
- 繼承類登錄
- 外鍵關聯登錄
- django-簡單的student 管理案例
- app-urls.py
- app-models.py配置
- admin-admin.py配置
- app-form.py 和數據庫關聯的寫法
- app-FBV_views.py
- app-CBV_views.py
- templates-index.html
- django-博客系統
- APP目錄-models.py 創建
- APP目錄-基礎展示數據分析
- APP目錄-基礎數據展示cls
- ListView
- DetailView
- FormView
- 額外功能拓建
- 添加文章搜索/用戶文章查詢功能
- 增加一個友情鏈接
- 增加一個評論模塊
- App-利用Bootstrap4 搭建樣式
- 項目crm
- 思維導圖
- perfectCRM-項目名字
- settings.py-配置
- view.py-登陸/登出函數
- crm-app文件
- model.py-表的創建
- admin.py-注冊后臺
- view.py-視圖層
- static-靜態文件
- css
- bootstrap.min.css
- dashboard.css
- ie10-viewport-bug-workaround.css
- signin.css
- fonts
- imgs
- js
- jquery.js
- bootstrap.min.js
- holeder.js
- ie10-viewport-bug-workaround.js
- ie-emulation-modes-warning.js
- plugins
- html模板文件-templates
- crm
- index.html-首頁模板