1. 程式人生 > >web框架

web框架

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文件

└─項目名
│ settings.py 項目配置文件
│ urls.py 路由配置
│ wsgi.py
│ __init__.py

└─__pycache__
(1)配置URL urls.py
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框架