CS/BS——客戶端和服務器的交互模型
- client--Browser
- server--Web後端--python(django、flask)、java、php、go
MVC
- 軟件架構風格--不是標準
- 將數據操作,業務處理,界面展示進行了拆分
- 核心思想:解耦合 松耦合
- Model:模型--封裝數據的交互操作(CRUD)
- View:視圖--是用來將數據呈現給用戶的
- Controller:控制器--接受用戶輸入--用來協調Model和View的關係,並對數據進行操作,篩選
- 流程:(1)控制器接受用戶請求 (2)調用模型、獲取數據 (3)控制器將數據展示到視圖中
MTV
- 本質上就是MVC,變種
- Model:同MVC中Model
- Template:模版--只是一個html,充當的是MVC中View的角色,用來做數據展示
- Views:視圖函數--相當於MVC中Controller
Django
- 基於Python的重量級Web框架,2005年開源,新聞站點--重量級,替開發者想了太多的事情,幫開發者做了很多的選擇,內置了很多的功能
- 使用版本:LTS 長期支持版本LongTimeSupport
- HelloDjango:(1)虛擬環境--mkvirtualenv 創建虛擬環境(2)deactivate 退出(3)workon 再次進入(4)rmvirtualenv 刪除虛擬環境
- 安裝:pip install django--pip install django == x.x.x 或 pip install django == x.x.x -i https://pypi.douban.com/simple
- 創建項目
- django-admin startproject XXX
- 項目結構 manage.py--管理整個項目的文件、以後的命令基本都通過manage.py來調用
- __init__:初始文件 settings:項目全局配置文件 urls:根路由 wsgl:用在以後項目部署上,前期用不到
- 啓動項目:python manage.py runserver
- 使用開發者服務器啓動項目
- 默認會運行在本機的8000端口上
- 還可以添加參數 [ [ip:] port] 0.0.0.0 全部電腦 代表本機所有ip
- 創建一個應用:
- python manage.py startapp App
- APP結構:(1)__init__初始化(2)views:視圖函數(3)models:模型(4)admin:後臺管理(5)apps:應用配置(6)tests:單元測試(7)migrations:__init__ 遷移目錄
- 第一件事:將應用註冊到項目的settings中INSTALLED_APPS中
- python manage.py startapp App
- 請求流程:Brower-> urls urls->views views->models models->views views->response
- 編寫第一個請求
- 編寫一個路由 urlpatterns url(p1, p2) p1-正則匹配規則 p2-對應的視圖函數
- 編寫視圖函數 本質上還是一個函數 只是默認第一個參數是一個request 必須返回一個response--HttpResponse render選人、簡寫
- 連接數據庫
- 默認在django中集成數據庫 SQLite 輕量級數據庫 沒有用戶名、密碼 常用的場景:Android、IOS、WP
- 修改數據庫:在settings中的DATABASES中進行修改,實際上都是關係型數據庫
- mysql 驅動 mysqlclient mysql-python pymysql:會僞裝、install_as_mysqldb()
- mysql USER PASSWORD HOST PORT NAME ENGINE
- 遷移:生成遷移 python manage.py makemigrations 執行遷移 python manage.py migrate 纔會正在在數據庫產生表
- 數據操作
- 增刪改查
- 存儲數據--創建對象進行save()
- 數據查詢--模型.objects.all() 模型.objects.get()
- 更新--基於查詢 save()
- 刪除--基於查詢 delete()
- 顯示在模版中
- 先挖坑 {{ var }}
- 再填坑:(1)渲染模版的時候傳遞上下文進來(2)上下文是有一個字典(3)key就是var,value就是要傳入的值
- 模版的兼容性很強--不傳入不會報錯,多傳入也會自動優化掉
- 瀏覽器不認模版--在到達瀏覽器之前,已經進行了轉換,將模版語言轉換成了HTML
- for 支持
- python manage.py shell django終端、繼承了django環境的python終端、通常用來調試
- 數據級聯:ForeignKey
- 一對多
- 多記一
- 一獲取多:多的set(集合)
- 多獲取一:就是一個書寫的屬性
模型關係
- 1:1
- 應用場景
- 應用於複雜表的拆分
- 擴展新功能
- Django中OneToOneField
- 在使用的時候,關係聲明還是有細微的差別的
- 實現
- 使用外鍵實現
- 對外鍵添加了唯一的約束
- 數據刪除
- 級聯表
- 主表
- 從表
- 誰聲明關係誰就是從表
- 在開發中如何確認主從
- 當系統遭遇不可避免的毀滅時,只能保留一張表,這個表就是主表
- 默認特性(CASECADE)
- 從表數據刪除,主表不受影響
- 主表數據刪除,從表數據直接刪除
- PROTECT受保護的
- 開發中,爲了防止誤操作,通常會設置爲此模式
- 主表如果存在級聯數據,刪除動作受保護,不能成功
- 主表不存在級聯數據,可以刪除成功
- SET
- SET_NULL
- 允許爲NULL
- SET_DEFAULT
- 存在默認值
- SET()
- 指定值
- SET_NULL
- 級聯表
- 應用場景
Python內存分配
- 垃圾回收使用引用計數器
- id([1, 2, 3]) == id([4, 5, 6])
- 存在賦值符號 = 纔會進行內存劃分
- 沒有賦值,直接調用會在臨時緩衝區,id獲取臨時緩衝區的內容,id一樣
爬蟲
- 模擬人去請求數據
- 提取數據
- 存儲數據
- 核心
- 數據爬去
- 數據提取 xpath、pyQuery
- 數據存儲
- 提升效率
- 進程
- 線程
- 協程