web框架
阿新 • • 發佈:2017-06-15
n) listen name 項目配置 參數 per decode code 分析
1.web框架的本質
在web瀏覽中, 瀏覽器相當於客戶端, 對web的操作相當於編寫服務器 最基本的web服務器代碼為import socket server=socket.socket() server.bind((‘127.0.0.1‘,8080)) server.listen(5) while True: conn,addr=server.accept() data=conn.recv(1024) conn.send(‘HTTP1.1/1.1 200 OK \r\n\r\n‘.encode(‘utf8‘)) conn.send(‘hello world‘.encode(‘utf8‘)) conn.close()
解析HTTP的請求報文
請求頭和請求體用\r\n\r\n分割
請求頭中的每一行用\r\n分割
2.基本框架的改進
(1)限制URL
通過分析請求頭,獲得請求頭的URL,用URL來返回不同的數據
import socket server=socket.socket() server.bind((‘127.0.0.1‘,8080)) server.listen(5) while True: conn,addr=server.accept() data=conn.recv(1024).decode(‘utf8‘) header,bodys=data.split(‘\r\n\r\n‘) ##請求頭與請求體用\r\n\r\n分割 headerlist=header.split(‘\r\n‘) ##請求頭以\r\n分割 method,url,protocal=headerlist[0].split(‘ ‘) ##獲取請求頭的首行 conn.send(‘HTTP1.1/1.1 200 OK \r\n\r\n‘.encode(‘utf8‘)) if url==‘/index‘: conn.send(‘main page‘.encode(‘utf8‘)) ##限制URL else: conn.send(‘404‘.encode(‘utf8‘))
(2)將URL封裝
import socket server=socket.socket() server.bind((‘127.0.0.1‘,8080)) server.listen(5) def f1(): conn.send(‘main page‘.encode(‘utf8‘)) def f2(): conn.send(‘hello world‘.encode(‘utf8‘)) routers=[ (‘/index‘,f1), (‘/hi‘,f2) ] while True: conn,addr=server.accept() data=conn.recv(1024).decode(‘utf8‘) header,bodys = data.split(‘\r\n\r\n‘) headerlist = header.split(‘\r\n‘) method, url, protocal = headerlist[0].split(‘ ‘) conn.send(‘HTTP1.1/1.1 200 OK \r\n\r\n‘.encode(‘utf8‘)) func_name=None for item in routers: if item[0]==url: func_name=item[1]##限制URL,對應字典中的value,觸發函數的執行 break if func_name: func_name() else: conn.send(‘404‘.encode(‘utf8‘)) conn.close()
(3)通過讀取文件返回HTML頁面
def f3():
with open(‘login.html‘,‘rb‘)as f:
conn.send(f.read())
routers=[
(‘/index‘,f1),
(‘/hi‘,f2),
(‘/wapper‘,f3)
]
(4)通過替換特殊字符串來動態返回HTML頁面
def f4():
with open(‘login.html‘,‘rb‘)as f:
data=f.read()
import time
ctime=time.time()
data=data.replace(b‘@@@ctime@@@‘,b‘ctime‘)
conn.send(data)
routers=[
(‘/index‘,f1),
(‘/hi‘,f2),
(‘/wapper‘,f3),
(‘/time‘,f4)
]
(5)讀取數據庫的表,獲得數據庫的數據並顯示
(6)使用jinjia2來替換動態內容
3.框架的分類
4.Django框架
4.1創建基本Django項目
(1)安裝
pip3 install django
添加環境變量
一般安裝到Python的scripts的文件夾下
將scripts文件夾添加到環境變量
C:\Python36\Scripts\django-admin
創建一個項目
django-admin startproject 項目名
進入該項目目錄中
python manage.py runserver IP地址:端口
如果不帶上IP地址和端口, 默認是本地地址, 端口為8000
4.2用IDE創建Django項目
項目結構相同│ db.sqlite3
│ manage.py 項目啟動管理PY文件
│(1)配置URL urls.py
└─項目名
│ settings.py 項目配置文件
│ urls.py 路由配置
│ wsgi.py
│ __init__.py
│
└─__pycache__
urlpatterns = [
# url(r‘^admin/‘, admin.site.urls),
url(r‘^login/‘, login),##後面一定要加逗號!!
]
(2)配置處理 函數urls.py
from django.conf.urls import url
from django.contrib import admin
from django.shortcuts import HttpResponse,render,redirect
def login(request):#處理用戶請求 並且返回結果
#至少有一個參數
# request 用戶請求相關的所有信息(對象)
# return HttpResponse(‘login‘) #HttpResponse裏面只能加字符串
# 返回用戶所需要的信息
# return HttpResponse(‘<input>‘)#也可以返回一個標簽,或者文件
if request.method=="GET":
return render(request,‘login.html‘)
else:
print(request.POST)#用戶名密碼字典都放在POST裏面
#獲取
u=request.POST.get("username")
p=request.POST.get("password")
if u=="root" and p=="123123":
return redirect(‘http://www.oldboyedu.com/‘)##跳轉地址
#登錄成功
else:
return render(request,‘login.html‘,{‘msg‘:‘用戶名或密碼錯誤‘})
#登錄失敗
#render默認自動查找模板路徑下的login.html文件
#讀取內容並返回給用戶
(3)使用render的模板文件配置settings.py
‘DIRS‘: [os.path.join(BASE_DIR, ‘templates‘)]
一般地, 模板文件放在templates文件中, 配置這個之後就能找到該文件了
(4)配置靜態文件目錄 settings.py
<link rel="stylesheet" href="/static/com.css">
--STATIC_URL = ‘/static/‘
STATICFILES_DIRS=(
os.path.join(BASE_DIR,‘sta‘),
)
web框架