什麼是web應用?
軟件開發架構
c/s架構
客戶端
服務端
b/s架構
瀏覽器
服務器
本質:b/s架構其實也是c/s架構
HTTP協議
超文本傳輸協議:規定了客戶端與服務端消息傳輸的格式
四大特性:
1.基於TCP/IP協議做用於應用層的協議
2.基於請求響應
3.無狀態
4.無鏈接
數據格式之請求:
請求首行
請求頭(一堆k,v鍵值對)
請求體(post請求攜帶的數據)
數據格式之響應:
響應首行
響應頭(一堆k,v鍵值對)
響應體(post請求攜帶的數據)
響應狀態碼
1XX 服務器已經成功接受到你的數據正在處理,你能夠繼續提交其餘數據
2XX 請求成功 服務器已經將你請求的數據發送給你了
3XX 重定向
4XX 請求資源不存在
5XX 服務器錯誤
動靜態網頁
靜態網頁:
頁面上的數據都是寫死的,萬年不變
動態網頁:
頁面上的數據是從後端動態獲取的
好比後端獲取當前時間
後端獲取數據庫數據而後傳遞給前端頁面
模板渲染
後端生成的數據直接傳遞給前端頁面使用(而且前端頁面能夠靈活的操做改數據) >>> 模板語法
模板渲染 模板語法須要依賴於第三方模塊
pip install 「jinja2」
模板語法 jinja2支持前端直接使用相似於python的語法操做數據
<p>{{ user_dic }}</p>
<p>{{ user_dic.name }}</p>
<p>{{ user_dic['password'] }}</p>
<p>{{ user_dic.get('name') }}</p>
{% for user in user_dict %} <!--[{},{},{},{}]-->
<tr>
<td>{{ user.id }}</td>
<td>{{ user.name }}</td>
<td>{{ user.password }}</td>
</tr>
{% endfor %}
templates
改文件夾存放就是全部的頁面文件(.html)
手擼web簡易版本的web框架
from wsgiref.simple_server import make_server from urls import * def run(env, response): # print(env) response("200 ok", [("username", "json"), ("password", "123")]) current_path = env.get("PATH_INFO") func = None for url_map in urls: if current_path == url_map[0]: func = url_map[1] break if func: res = func(env) else: res = error(env) return [res.encode("utf8")] if __name__ == '__main__': server = make_server("127.0.0.1", 8080, run) server.serve_forever()
from views import * urls = [ ("/index", index), ("/login", login), ("/get_time", get_time), ('/get_db', get_db) ]
import time from jinja2 import Template import pymysql def index(env): return "index" def login(env): return "login" def error(env): return "404 error" def get_time(env): with open(r"templates/get_time.html", "r") as f: data = f.read() res = data.replace("@@time@@", time.strftime("%Y-%m-%d %X")) return res def get_db(env): # 鏈接數據庫 獲取數據 渲染到前端頁面 conn = pymysql.connect( host='127.0.0.1', port=3306, user='root', password='123456', database='day41', charset='utf8', autocommit=True ) cursor = conn.cursor(pymysql.cursors.DictCursor) cursor.execute('select * from userinfo') user_dict = cursor.fetchall() # [{},{},{},{}] print(user_dict) with open(r'templates/get_db.html', 'r', encoding='utf-8') as f: data = f.read() tmp = Template(data) return tmp.render(user_dict=user_dict)
什麼是web框架?
python三大主流web框架
Django:大而全,自帶了不少功能模塊,相似於航空母艦 (缺點:有點笨重)
Flask:短小精悍,自帶的功能模塊特別少,大部分都是依賴於第三方模塊(小而輕)
Tornado:異步非阻塞 主要用在處理高io 多路複用的狀況 能夠寫遊戲後端
a:socket
b:路由與視圖函數
c:模板渲染
Django:
a用的別人的 wsgiref
b本身寫的
c本身寫的
Flask:
a用的別人的 werkzeug
b本身寫的
c用的別人的 jinja2
Tornado:
a,b,c都是本身寫的
注意事項(*****************************):
1.計算機的名稱不能有中文
2.一個pycharm窗口就是一個項目,不要多個項目放在一個窗口裏面
3.項目名不能起中文
Django簡介
版本問題
djang下載
推薦下載1.11.11版本
命令行直接下載
pip3 install django==1.11.11
pycharm下載
驗證是否下載成功
django-admin
建立django項目的方式
方式1(命令行建立):
建立django項目
django-admin startproject 項目名
建立app應用
python3 manage.py startapp app01
啓動django項目
python manage.py runserver 127.0.0.1:8080
ps:用命令行建立django默認不會自動建立templates文件夾
須要你手動本身建立(注意改文件夾路徑是否被添加配置文件中)
方式2(pycharm建立)
FILE >>> new project 選擇第二個django 須要注意名字不能有中文,選擇本地的解釋器,勾選後臺管理
建立app
pycharm命令行建立
python3 manage.py startapp app01
Tools下面run manage task功能欄
啓動點小綠色箭頭
強調:
1.用django必定要保證只有一個在運行狀態 切記切記!!!!!!!
2.必定記得清瀏覽器的緩存
app(應用)的概念
一個django項目就是一所大學
app就是大學裏面的學院
注意新建立的app須要在配置文件中註冊才能生效(*******************)
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app01.apps.App01Config' # 能夠用全稱
'app01' # 也能夠簡寫
]
django各個文件的做用
應用名
migrations 數據庫遷移記錄相關數據
admin.py django後臺管理相關
models.py 模型表相關
views.py 視圖函數相關
項目名
settings.py 配置文件
urls.py 路由與視圖函數的映射關係
templates
項目用到的全部的html文件
manage.py
django入口文件
django小白必會三板斧
from django.shortcuts import render,HttpResponse,redirect
HttpResponse 返回字符串
render 返回一個html頁面
兩種給前端頁面傳值的方式
def reg(request):
user_dict = {'name':'jason','password':'123'}
return render(request,'reg.html',{'user_dict':user_dict})
def reg(request):
user_dict = {'name':'jason','password':'123'}
return render(request,'reg.html',locals())
redirect 重定向(簡單來講跳轉網頁)
django識別到你的代碼變化以後會自動,可是有時候反應速度比較慢
你能夠手動重啓,你也能夠多刷新幾回瀏覽器
1. 快捷鍵:win+R, 輸入cmd, 打開cmd窗口,html
2. 輸入命令:netstat -ano | findstr 8000, 找到PID前端
3. 輸入命令:tasklist | findstr 10780 找到你了,python
4. 這確定不是系統的執行文件,KG.... 酷狗?酷狗你佔用8000端口django知道嗎?你這對python程序員一點都不友好mysql