[TOC]html
import socket server = socket.socket() server.bind(('127.0.0.1', 8080)) server.listen(5) spe_conn, address = server.accept() # 阻塞態 data = spe_conn.recv(1024) data_str = data.decode('utf8') current_path = data_str.split('\r\n')[0].split(' ')[1] spe_conn.send(b'HTTP/1.1 200 ok\r\n\r\n') if current_path == '/index': with open(r'手寫web前端頁面.html', 'rb') as fr: spe_conn.send(fr.read()) elif current_path == '/login': spe_conn.send(b'login') else: spe_conn.send(b'404 error') spe_conn.close()
存放函數, 這些函數被稱爲視圖函數, 視圖層前端
存放路由後綴與視圖函數的對應關係, 路由層python
存放html模板文件mysql
def get_user_dic(env): from jinja2 import Template user_dic = {'user_name': 'jason', 'hobby': ['read', 'book', 'run']} with open(r'templates/get_user_dic.html', 'r', encoding='utf8') as fr: data = fr.read() # 在內存中讀取HTML模板 temp = Template(data) # 獲得temp對象 res = temp.render(userDic=user_dic) # 根據HTML模板中的模板語法, 將user_dic渲染到HTML模板中, 在內存中生成一個完整的HTML文件(即res) # print(res) return res ''' res對應整個html頁面在內存中渲染後的結果 模板語法部分對應結果: <p>{'user_name': 'jason', 'hobby': ['read', 'book', 'run']}</p> <p>jason</p> <p>['read', 'book', 'run']</p> <p>read</p> <p>book</p> <p>run</p> '''
<!--模板語法--> <p>{{userDic}}</p> <p>{{userDic.user_name}}</p> <p>{{userDic['hobby']}}</p> <p>{{userDic.get('hobby').0}}</p> <p>{{userDic.get('hobby').1}}</p> <p>{{userDic.get('hobby').2}}</p>
pymysql.connect-->Connect-->__init__
web
模板的渲染: 將後端處理好的數據, 在內存中讀取HTML模板, 並經過jinjia2模板語法生成一個完整的HTML文件的過程sql
模板的渲染是在後端完成的, 與前端無關數據庫
pymsql複習django
import pymysql client = pymysql.connect( host='127.0.0.1', port=3306, user='root', password='Cql123456', db='django', charset='utf8', autocommit=True ) cursor = client.cursor(pymysql.cursors.DictCursor) # 將查詢出的數據組織成一個字典 sql = "select id, username, password from user_info" # 當數據量特別大時, *會下降查詢效率 affect_rows = cursor.execute(sql) # sql注入: 利用mysql註釋語法鑽漏洞, 關鍵數據交給execute拼接 user_lt = cursor.fetchall()
django:flask
flask:後端
tornado:
建立django項目: django-admin startproject 項目名
啓動django項目: manage.py runserver127.0.0.1:8080
app: django是一個以開放app爲主要功能的web框架
一個django項目相似於一所大學, 而app相似於大學裏的學院
能夠根據功能的不一樣開放多個app, 一個app對應一個具體的功能模塊
建立app: python manage.py startapp app名
不會自動建立templates文件夾, 建立後手動將templates文件夾路徑添加到settings.py中
settings-->TEMPLATES-->'DIRS': [os.path.join(BASE_DIR, 'templates')]
1.建立的app須要在django配置文件中註冊才能生效: 'INSTALLED_APPS = [..., app02.apps.App02Config']
經過反射找到所建立的app
2.必定要確保同一個端口同一時間只能啓一個django項目
3.更改使用的數據庫, settings-->DATABASES
django項目名
HttpResponse: 返回字符串
def index(request): # 參數request <==> env, 必須傳 return HttpResponse('一臉懵逼')
render: 返回HTML文件, 能夠給HTML文件傳值
def login(request): user_dic = {'username': 'jason', 'password': '123'} return render(request, 'login.html', {'userDic': user_dic})
redirect: 重定向, 1. 直接寫本網站的路徑後綴; 2. 寫其餘網站全路徑
def home(request): return redirect('/login') # return redirect('https://www.baidu.com')
重啓機制: 內有檢測機制, 實時檢測全部文件的變化, 有時會產生代碼還沒寫完就自動重啓報錯的狀況, 不用管