wordpress隱藏服務(wù)器ip網(wǎng)站seo優(yōu)化分析
文章目錄
- 一、Django引入
- 1.web應(yīng)用程序
- 什么是web?
- web引用程序的優(yōu)點
- web應(yīng)用程序的缺點
- 什么是web框架
- 2.純手寫web框架
- 1.web框架的本質(zhì)
- 2.HTTP協(xié)議的特性:
- 3.編寫
- 基于wsgire模塊搭建web框架
- 代碼封裝優(yōu)化
- 代碼封裝
- 二、Django框架的學(xué)習(xí)
- 1.Python中的主流框架
- 2.如何使用Django:
- 1.版本問題
- 2.運行Django注意事項
- 3.下載
- 4.驗證
- 5.常見命令
- 6.pycharm自動創(chuàng)建django項目
- 3.Django app的概念
- 創(chuàng)建應(yīng)用
- 注冊應(yīng)用
- Django小白必會三板斧
一、Django引入
1.web應(yīng)用程序
什么是web?
web應(yīng)用程序是一種可以通過web訪問的應(yīng)用程序,用戶只需有瀏覽器即可,不需要再安裝其他軟件
比如:淘寶網(wǎng)、京東網(wǎng)、博客園等都是基于web應(yīng)用的程序
應(yīng)用程序有兩種模式C/S、B/S
C/S是客戶端/服務(wù)端程序,也就是說這類程序一般獨立運行。而B/S就是瀏覽器端/服務(wù)端應(yīng)用程序,這類應(yīng)用程序一般借助IE等瀏覽器來運行。web應(yīng)用程序一般是B/S模式
web引用程序的優(yōu)點
- 你所需要的就只是一個適用的瀏覽器
- 節(jié)省硬盤空間
- 它們不需要更新,因為所有的新特性都在服務(wù)器上執(zhí)行,從而自動傳達(dá)到用戶端
- 可以跨平臺使用:windows,Mac,Linux等等
web應(yīng)用程序的缺點
嚴(yán)重依賴服務(wù)端正常運行,一旦服務(wù)端出現(xiàn)問題,客戶端就會受到影響
什么是web框架
被人寫好的框架(就是一堆文件和目錄),我們只需要在固定的位置寫代碼即可
2.純手寫web框架
1.web框架的本質(zhì)
web框架本質(zhì)上可以看成是一個功能強大的socket服務(wù)端,用戶的瀏覽器可以看成是擁有可視化界面的socket客戶端。兩者通過網(wǎng)絡(luò)請求實現(xiàn)數(shù)據(jù)交互,學(xué)者們也可以從架構(gòu)層面上先簡單的將Web框架看做是對前端、數(shù)據(jù)庫的全方位整合
2.HTTP協(xié)議的特性:
1.四大特性
基于請求響應(yīng)
基于TCP協(xié)議之上的應(yīng)用層協(xié)議
無狀態(tài)
短連接
2.請求數(shù)據(jù)格式
請求首行(請求方式、協(xié)議、版本號、路徑)
請求頭
\r\n
請求體
\r\n
請求體(get請求方式是沒有請求體的、POST請求方式才有請求體)
3.響應(yīng)數(shù)據(jù)格式
響應(yīng)首行()
響應(yīng)頭
\r\n
響應(yīng)體()
4.響應(yīng)狀態(tài)碼
1xx
2xx
3xx
4xx
5xx
3.編寫
import socketserver = socket.socket() # 默認(rèn)是TCP協(xié)議
server.bind(('127.0.0.1', 8800)) # IP PORT
server.listen(3) # 半連接池while True:sock, addr = server.accept() # 等待連接data = sock.recv(1024) # 字節(jié)bytessock.send(b'http/1.1 200 ok\r\n\r\n') data_str = data.decode() # 轉(zhuǎn)碼data_list = data_str.split(' ')[1] # 切分后索引取值print(data_list)if data_list == '/index':sock.send(b'hello index')elif data_list == '/login':sock.send(b'hello login')else:sock.send(b'hello home')
當(dāng)前的服務(wù)端存在什么問題?
- socket部分需要每次都需要我們自己寫
- 我們需要自己每次處理HTTP格式的數(shù)據(jù),自己轉(zhuǎn)碼、切分、取值等
- 沒有解決高并發(fā)問題
以上的問題怎么優(yōu)化呢?
借助于wsgiref模塊的使用
基于wsgire模塊搭建web框架
from wsgiref.simple_server import make_serverdef run(request, response):""":param request: 請求相關(guān)數(shù)據(jù):param response: 響應(yīng)相關(guān)數(shù)據(jù):return: 返回給客戶端的真實數(shù)據(jù)"""response('200 OK', []) # 固定格式 不用管它# print(request) 是一個處理之后的大字典path_info = request.get('PATH_INFO')if path_info == '/index':return [b'index']elif path_info == '/login':return [b'login']return [b'hello wsgiref module']if __name__ == '__main__':server = make_server('127.0.0.1', 8080, run) # 實時監(jiān)聽127.0.0.1:8080 一旦有請求過來自動給第三個參數(shù)加括號并傳參數(shù)調(diào)用server.serve_forever() # 啟動服務(wù)端
代碼封裝優(yōu)化
1.網(wǎng)址后綴的匹配問題
2.每個后綴匹配成功后執(zhí)行的代碼有多有少面條版 函數(shù)版 模塊版
3.將分支的代碼封裝成一個個函數(shù)
4.將網(wǎng)址后綴與函數(shù)名做對應(yīng)關(guān)系
5.獲取網(wǎng)址后綴循環(huán)匹配
6.如果想新增功能只需要先寫函數(shù)再添加一個對應(yīng)關(guān)系即可
7.根據(jù)不同的功能拆分成不同的py文件views.py 存儲核心業(yè)務(wù)邏輯(功能函數(shù))urls.py 存儲網(wǎng)址后綴與函數(shù)名對應(yīng)關(guān)系templates目錄 存儲html頁面文件
8.為了使函數(shù)體代碼中業(yè)務(wù)邏輯有更多的數(shù)據(jù)可用將request大字典轉(zhuǎn)手傳給這個函數(shù)(可用不用但是不能沒有)
代碼封裝
1.逐次拆分出來
模塊封裝功能
from wsgiref import simple_serverdef run(request, response):""":param request: 請求相關(guān)的數(shù)據(jù):param response: 響應(yīng)相關(guān)的數(shù)據(jù):return: 返回給客戶端的展示數(shù)據(jù)"""response('200 OK', []) # 固定編寫 無需掌握 return [b'hello jason']if __name__ == '__main__':server = simple_server.make_server('127.0.0.1', 8080, run)'''監(jiān)聽本機8080端口 一旦有請求訪問 自動觸發(fā)run方法的執(zhí)行'''server.serve_forever()
# 模塊封裝了socket代碼并將請求數(shù)據(jù)處理成諸多k:v鍵值對
路由對應(yīng)響應(yīng)
# run函數(shù)體中添加下列代碼
current_path = request.get("PATH_INFO")
if current_path == '/login':return [b'hello login html']
elif current_path == '/register':return [b'hello register html']
return [b'404 error']
2.封裝成函數(shù)
def register(request):return 'register'def login(request):return 'login'def error(request):with open(r'templates/error.html', 'r', encoding='utf8') as f:return f.read()urls = (('/login',login),('/register',register)
)def run(request, response):func_name = Nonefor url_tuple in urls: if current_path == url_tuple[0]:# 先獲取對應(yīng)的函數(shù)名func_name = url_tuple[1]# 一旦匹配上了 后續(xù)的對應(yīng)關(guān)系就無需在循環(huán)比對了break# for循環(huán)運行完畢之后 func_name也有可能是Noneif func_name:res = func_name(request)else:res = error(request) # 順手將request也傳給函數(shù) 便于后續(xù)數(shù)據(jù)的獲取return [res.encode('utf8')]
將后綴匹配單獨做一個模塊
# 后綴匹配
urls = (('/register', register),('/login', login),('/index', index),
)
服務(wù)端啟動文件
from wsgiref import simple_server
from urls import urls
from views import errordef run(request, response):response('200 OK', []) current_path = request.get("PATH_INFO")func_name = Nonefor url_tuple in urls: # ('/register', register)if current_path == url_tuple[0]:func_name = url_tuple[1]breakif func_name:res = func_name(request)else:res = error(request) return [res.encode('utf8')]if __name__ == '__main__':server = simple_server.make_server('127.0.0.1', 8080, run)server.serve_forever()
請求后綴相對應(yīng)的響應(yīng)
def register(request):return 'register'def login(request):return 'login'def index(request):return 'index'def error(request):with open(r'templates/error.html', 'r', encoding='utf8') as f:return f.read()
總結(jié)拆分后要是想新增一個功能,只能在view.py中編寫函數(shù),urls.py添加對應(yīng)關(guān)系即可
3.模板文件和靜態(tài)文件
templates文件夾 存儲HTML文件
static文件夾 存儲HTLML頁面所需靜態(tài)資源
二、Django框架的學(xué)習(xí)
1.Python中的主流框架
Django框架:最主流的,市場占用率90%以上,笨重的框架,里面自帶了很重的模塊,不適用于小項目,類似于航空母艦
falsk框架:輕量級的,小而美,自帶的功能比較少,需要安裝很多的第三方模塊,當(dāng)你安裝的模塊足夠多的時候,也差不多跟Django差不多了
tornado框架:異步非阻塞、高性能、學(xué)這個框架成本有點高、解決的并發(fā)量挺高的,它一般用在特殊的場景
fastapi框架:它主要用來寫一些接口,不寫頁面,他只負(fù)責(zé)寫業(yè)務(wù)邏輯
2.如何使用Django:
1.版本問題
django 1.x 同步 1.11
django 2.x 同步 2.2 常用
django 3.x 支持異步 3.2
django 4.x 支持異步 4.2
版本之間的差異其實不大,主要是添加了額外的功能
2.運行Django注意事項
1.django項目中所有的文件名目錄名不要出現(xiàn)中文
2.計算機名稱盡量不要出來中文
3.一個pycharm盡量就是一個完整的項目(不要嵌套和疊加)
4.不同版本的python解釋器與不同版本的django可以會出現(xiàn)問題
3.下載
pip3 install django 默認(rèn)最新版
pip3 install django版本號 指定版本
pip3 install django2.2.22
pip下載模塊會自動解決依賴問題(會把關(guān)聯(lián)需要用到的模塊一下下載)
4.驗證
django-admin
5.常見命令
1.創(chuàng)建django項目django-admin startproject 項目名
2.啟動django項目cd 項目名python38 manage.py runserver ip:port
6.pycharm自動創(chuàng)建django項目
pycharm會自動創(chuàng)建django項目,但是配置文件中可能會報錯,需要改目錄配置os.path.join(BASE_DIR,'templates')
3.Django app的概念
Django框架就類似于是一所大學(xué),一所大學(xué)也要有二級學(xué)院
應(yīng)用就類似于是二級學(xué)院,一個Django框架至少要有一個應(yīng)用
創(chuàng)建應(yīng)用
1.終端命令創(chuàng)建應(yīng)用
python38 manage.py startapp 應(yīng)用名
2.pycharm創(chuàng)建應(yīng)用
新建Django項目的時候默認(rèn)創(chuàng)建一個,并且會自動注冊應(yīng)用
注冊應(yīng)用
在你的Django項目里找到settings.py文件,找到INSTALLED_APPS列表,添加應(yīng)用名
Django主要目錄結(jié)構(gòu)
django2 項目名稱app01 應(yīng)用名稱migrations 用來存儲數(shù)據(jù)庫遷移記錄__init__.py admin.py 跟后臺項目注冊相關(guān)apps.py 跟一些注冊相關(guān)models.py 數(shù)據(jù)庫 模型層tests.py 測試文件views.py 視圖文件,寫一些后端邏輯
django2__init__.py settings.py 配置相關(guān)urls.py 路由相關(guān)wsgi.py 內(nèi)部封裝wsgiref服務(wù)器
templates 模型文件夾,需手動創(chuàng)建,pycharm自動創(chuàng)建
db.sqlite3 Django自帶的小型數(shù)據(jù)庫
manage.py Django框架的入口文件
Django小白必會三板斧
frpm django.shortcuts import render,HttpResponse,redirectHttpResponse 返回字符串類型的數(shù)據(jù)
render 返回HTML頁面并且支持傳值
redirect 重定向