1. 程式人生 > 實用技巧 >django框架之引入及介紹等相關內容-59

django框架之引入及介紹等相關內容-59

1 web應用

1 用瀏覽器訪問的應用程式
2 優點:
-不需要客戶端
-更新直接在服務端更新,客戶端感知不到
-跨平臺性好
3 缺點:
-強調瀏覽器的適用性
-使用者的資料都儲存在軟體廠商那邊

2 bs、cs架構

1 bs:瀏覽器---服務端  (本質還是cs)
2 cs:客戶端---服務端

3 手寫一個web應用

1 客戶端是瀏覽器,服務端自己寫(python)


2 靜態頁面,動態頁面
-靜態頁面:靜態的html,內容不會改變,每次訪問看到的資料都一樣
-動態頁面:頁面的資料會發生變化,每次訪問看到的可能都不一樣(資料來源可能是資料庫)

3.1 main.py

# 1 寫一個web應用的服務端,通過瀏覽器(客戶端),來訪問

import socket

server = socket.socket()

# server.bind(('127.0.0.1', 8080))
server.bind(('0.0.0.0', 8080))
server.listen(5)

while True:
conn, addr = server.accept()
# 接收瀏覽器傳過來的資料
data = conn.recv(1024)
print(data)
# 返回給瀏覽器資料(不符合http協議)
# conn.send(b'hello world')
# 返回資料符合http協議
# conn.send(b'HTTP/1.1 200 ok \r\n\r\n hello world')

# 返回符合html格式的資料
# conn.send('HTTP/1.1 200 ok \r\n\r\n <h1>title</h1>'.encode('utf-8'))

## 返回一個html頁面,開啟檔案,轉成二進位制,send一下
# with open('index.html','r',encoding='utf-8') as f:
# data=f.read()
#
# response='HTTP/1.1 200 ok \r\n\r\n %s'%data
# conn.send(response.encode('utf-8'))

## 實現動態頁面(靜態頁面,動態頁面)
# 在index.html中寫一個特殊標記,使用python的變數去替換這個特殊標記
import time
ctime=time.time() # 可能是資料庫查詢出來的
with open('index.html','r',encoding='utf-8') as f:
data=f.read().replace('{{time}}',str(ctime))
response='HTTP/1.1 200 ok \r\n\r\n %s'%data
conn.send(response.encode('utf-8'))


conn.close()

3.2 index.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{{time}}
<br>
<br>

<img height="100" width="100" src="https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1601009198247&di=b7b696110501b0e1ba3b5c508335c7b2&imgtype=0&src=http%3A%2F%2Fb-ssl.duitang.com%2Fuploads%2Fitem%2F201509%2F29%2F20150929213123_Mvy4S.jpeg" alt="">
</body>
</html>

4 http協議

1 HTTP協議是Hyper Text Transfer Protocol(超文字傳輸協議)的縮寫,是用於全球資訊網伺服器與本地瀏覽器之間傳輸超文字的傳送協議
2 應用層的協議
3 http協議特性(記一下)
-1 基於tcp/ip之上的應用層協議
-2 基於請求-響應模式
-3 無狀態儲存
-4 無連線



4 請求協議(瀏覽器發出來的)(記住)
三部分:請求首行,請求頭,請求體

'''
# 請求首行(以第一個\r\n區分的),
# 請求方式:GET 請求地址:/lqz/handsome 協議:http 版本:1.1版本
GET /lqz/handsome HTTP/1.1\r\n

# 請求頭(key:value形式)
Host: 192.168.11.211:8080\r\n
Connection: keep-alive\r\n
Cache-Control: max-age=0\r\n
Upgrade-Insecure-Requests: 1\r\n
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36\r\n
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9\r\n
Accept-Encoding: gzip, deflate\r\n
Accept-Language: zh-CN,zh;q=0.9\r\n\r\n'

# \r\n\r\n 下面的是請求體的內容

'''


5 響應協議


'''
# 響應首行 響應協議和版本:HTTP/1.1 響應的狀態碼和標誌:200 ok
HTTP/1.1 200 ok \r\
# 響應頭(key:value形式)
key:value
key:valu
\r\n\r\n
# 響應體:在瀏覽器裡看到的東西(瀏覽器能把下面的html渲染成好看的樣子)

<!DOCTYPE html>
<html lang="en">
<h1>hello</h1>
</html>
'''

6 響應狀態碼
-1xx:請求正在處理(使用者一般看不到)
-2xx:請求成功(200)
-3xx:重定向(301 302)訪問一個地址,轉到另一個地址
-4xx:客戶端錯誤(404,403)
-5xx:服務端錯誤(502)


7 url:統一資源定位符
# 格式
http://127.0.0.1:8080/order.html
ftp://xxx
協議://IP:埠(80)/路徑?name=lqz&age=18
統一資源定位符是可以從網際網路上訪問資源的一種方式,協議就是資源的地址

5 web框架

1 web框架就是在以上十幾行程式碼基礎張擴展出來的,有很多簡單方便使用的方法,大大提高了開發的效率

6 基於wsgiref寫一個web框架

1 socket自己寫的,藉助於一個模組,已經實現了socket
2 wsgiref:django預設使用的

3 在web框架上繼續開發
-以後路徑都去urls.py中寫
-路徑匹配以後執行的函式,都放在views.py
-資料庫相關操作,在models.py中

7 django與其他web框架區別

1 python中主流web框架:django,flask,tornado(效能高),sanic,fastapi。。。。。
socket假設叫:a
路由的對映關係:b
模板渲染:     c
自己寫的web框架:  a:用了第三方wsgiref  b:自己寫的  c:自己寫的
django:         a:用了第三方wsgiref   b:自己寫的  c:自己寫的
flask            a:用了第三方          b:自己寫的  c:用了第三方
tornado          a:自己寫的           b:自己寫的  c:自己寫的

8 django安裝與簡單使用

0 django的版本:1.x  2.x  3.x  版本之間是由差距的
1 安裝的幾種方式
	-在cmd中敲:pip3 install django==1.11.9         預設裝最新版本(3.x)
    -pycharm中--》setting--》直譯器--》點+號,選擇版本,安裝
    -pycharm的Terminal中敲  pip3 install django==1.11.9 
    
2 裝完以後,會多個一個django-admin的命令,在D:\python38\Scripts 路徑下
    由於D:\python38\Scripts之前就被加入到環境變數,在任意路徑指向django-admin都能找到
        
3 django-admin是用來建立django專案的命令(建立專案就是生成目錄,生成一堆py檔案)

4 建立專案(在哪個路徑下指向,專案就建立在哪,在c盤根路徑)
	django-admin startproject 專案名
    django-admin startproject myfirstdjango
5 建立完以後,用pycharm開啟即可
6 在專案根路徑建立app
	python3 manage.py startapp app名字

	
7 django目錄結構
	-views.py:函式,檢視函式
    -urls.py:路徑(路由)和檢視函式的對應關係
    -models.py:表模型(資料庫操作相關)


8 最簡單的方式,通過pychrm建立
    
    
100:問題
	1 如果計算機名是中文,專案路徑中有中文空格,都可能會報錯
    2 python3.7或者3.8 對django1.x的版本相容性可能存在問題,1.x版本推薦用python3.6

##

作業

1 搜尋一下http的狀態碼有哪些?分別代表什麼意思?

2 http的請求頭和http的響應頭有哪些,分別代表什麼意思?

3 django框架安裝好,跑起一個helloworld

4 上課講的整理成比較,發部落格

5 擴充套件:

-在django中實現訪問index,返回一個頁面(好看的頁面,放個圖)

-在django中實現訪問login,返回一個登入頁面(form表單,可以寫的好看一些)