1. 程式人生 > >一、1 基於socket手寫web框架

一、1 基於socket手寫web框架

1 web 應用
2 c/s 和bs架構
3 python中的web框架
    a :socket
    b:路由跟檢視函式匹配關係
    c:模板渲染

    django: a: 用了別人的wsgiref   b:自己寫的   c:自己寫的
    flask: a:用了別人的            b:自己寫的   c:用了別人的:jinja2
    tornado: a 自己寫的            b:自己寫的   c:自己寫的

4 http協議:
    -特點:1 基於TCP/IP協議之上的應用層協議
          2 基於請求-響應模式
          3 無狀態儲存
          4 短連線
    -請求格式:
    -響應格式:
5 django的安裝和簡單使用
    -安裝:1 pip3 install django==1.11.9
          2 pycharm 下安裝,選擇版本號
    -使用:
         命令建立專案:django-admin startproject 專案名字
         建立app:python3 manage.py startapp app01
    -檔案目錄介紹:
        -manage.py---專案入口,執行一些命令
        -專案名
            -settings:全域性配置資訊
            -urls:總路由,請求地址跟檢視函式的對映關係
        -app名字
            -migrations:資料庫遷移的記錄
            -models.py  資料庫表模型
            -views  檢視函式

    -執行專案:
        pytyon3 manage.py runserver 127.0.0.1:8001


6 補充:
    1 decode和encode
        data = b'111111'
        data = str(data, encoding='utf-8')
        print(type(data))
        data = bytes(data, encoding='utf-8')
        print(type(data))
    2 pymysql連結資料庫
        #拿到資料庫連結
        conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', db='lqz', password='admin')
        #獲得遊標,並且查詢結果資料是字典格式
        cur=conn.cursor(pymysql.cursors.DictCursor)
        #執行sql
        cur.execute('select * from user')
        #獲取全部查詢結果
        dic=cur.fetchall()
    3 以後寫專案:
        1 不要用中文
        2 計算機名不能用中文
        3 一個工程,就是一個專案

7 作業:
    1 上課講的內容整理到部落格上
    2 django下載下來,跑起來
    3 單表的圖書管理系統
      圖書的增刪改查
        一個book表
          id  name   price  author  publish

      所有人都必須完成:查

認識web框架:

my_django.py

import socket
server=socket.socket()
server.bind(('127.0.0.1',8001))
server.listen(5)
while True:
    conn,client_address=server.accept()
    data=conn.recv(1024)
    # 等客戶端連線進來以後,回給客戶端訊息
    conn.send(b'HTTP/1.1 200 OK\r\nContent-Type:text/html\r\n\r\n')
    print(data)
    # conn.close()
    # 把上面的二進位制格式轉換成下面的字串型別,不需要再記住 是用encode 還是用decode
    data = str(data,encoding='utf-8')
    # 如何把字串型別轉換成二進位制型別
    # b1=bytes(data,encoding='utf-8')
    position=data.split('\r\n')[0].split(' ')[1]

    if '/index' == position:
        with open('index.html','rb') as f:
            da=f.read()
        conn.send(da)
    else:
        conn.send(b'404')
    conn.close()

index.html(同級目錄下即可)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>h1</h1>
<h2>h2</h2>
<img src="http://img4.imgtn.bdimg.com/it/u=1565006133,780611353&fm=26&gp=0.jpg">
</body>
</html>