目錄html
所謂的web框架就是一個C/S架構。前端
咱們能夠用socket來編寫咱們的服務端,那麼客戶端是咱們的瀏覽器,當咱們訪問服務器資源的時候,服務器接收到請求,可是沒法響應給客戶端。python
這是由於要發送的數據沒有遵循http協議,在服務端添加http協議頭以後能夠進行訪問web
那麼咱們若是在網址後面加參數,好比127.0.0.1:8080/index 相似這種的,服務器也沒法響應了,這時候咱們能夠利用wsgiref這個模塊來接收客戶端的參數獲取用戶的url參數信息,根據這個參數信息,咱們能夠定義一個urls.py路由文件,幫咱們任務的分發,分發到views.py視圖函數中,shell
視圖函數中利用三板斧能夠發送給前端信息,最終展現給客戶端。django
咱們能夠這樣理解:全部的Web應用本質上就是一個socket服務端,而用戶的瀏覽器就是一個socket客戶端。 這樣咱們就能夠本身實現Web框架了。flask
對於真實開發中的python web程序來講,通常會分爲兩部分:服務器程序和應用程序。後端
服務器程序負責對socket服務器進行封裝,並在請求到來時,對請求的各類數據進行整理。瀏覽器
應用程序則負責具體的邏輯處理。爲了方便應用程序的開發,就出現了衆多的Web框架,例如:Django、Flask、web.py 等。不一樣的框架有不一樣的開發方式,可是不管如何,開發出的應用程序都要和服務器程序配合,才能爲用戶提供服務。服務器
這樣,服務器程序就須要爲不一樣的框架提供不一樣的支持。這樣混亂的局面不管對於服務器仍是框架,都是很差的。對服務器來講,須要支持各類不一樣框架,對框架來講,只有支持它的服務器才能被開發出的應用使用。
這時候,標準化就變得尤其重要。咱們能夠設立一個標準,只要服務器程序支持這個標準,框架也支持這個標準,那麼他們就能夠配合使用。一旦標準肯定,雙方各自實現。這樣,服務器能夠支持更多支持標準的框架,框架也可使用更多支持標準的服務器。
WSGI(Web Server Gateway Interface)就是一種規範,它定義了使用Python編寫的web應用程序與web服務器程序之間的接口格式,實現web應用程序與web服務器程序間的解耦。
經常使用的WSGI服務器有uwsgi、Gunicorn。而Python標準庫提供的獨立WSGI服務器叫wsgiref,Django開發環境用的就是這個模塊來作服務器。
須要用到:
大型的框架,自帶的組件和功能很是多
相似於航空母艦
強大的功能以外不足之處:比較笨重
短小精悍,自帶組件很是少
基本所有依賴於第三方組件
若是將flask全部第三方模塊加起來,能夠蓋過django
異步非阻塞的一個框架,能夠用來開發遊戲服務器,效率很是很是高。
安裝Django以前注意:
安裝直接用pip安裝便可
pip3 install django==1.11.11
如何檢驗django是否安裝成功
命令行敲 django-admin
命令行建立項目:
django-admin startproject
項目名(例如mysite)
pycharm建立項目:
python3 manage.py startapp app01
django是一個以開發app爲主要功能的web框架
app就是application應用的意思
一個django項目就是一所大學(空的架子 自己沒有任何功能),而app就相似於大學裏面的各個學院。
一個app就對應一個具體的功能模塊。
建立好的app須要在django配置文件中註冊方可生效
注意
1.使用命令行建立項目不會自動幫你建立templates文件夾
2.配置文件中不會自動幫你書寫templates文件路徑
3.setting配置文件中也不會自動幫你加app,不會生效
setting配置文件:
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'app01.apps.App01Config', # 若是新建的app沒有,這裏要加上 ] TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR,"templates")], # 若是這裏的路徑是空的,要手動加 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ]
mysite/ ├── manage.py # 管理文件 └── mysite # 項目目錄 ├── __init__.py ├── settings.py # 配置 ├── urls.py # 路由 --> URL和函數的對應關係 └── wsgi.py # runserver命令就使用wsgiref模塊作簡單的web server
python manage.py runserver 127.0.0.1:8000
from django.shortcuts import HttpResponse,render,redirect
內部傳入一個字符串的參數,將會返回給瀏覽器
例如:
def index(request): # 業務邏輯代碼 return HttpResponse("正常訪問了")
能夠接收多個參數
第一個參數接收request
第二個參數填寫一個待渲染的模板文件(html文件)
第三個參數寫一個保存具體數據的字典
意思是將數據填充進模板文件,最後將結果返回給瀏覽器,相似於Jinja2模板,注意,這裏的reder使用的模板語法,在html文件中可使用python的字典語法取值,是python後端處理完成以後再發送到html的,最後纔將結果返回給瀏覽器。
例如:
def index(request): # 業務邏輯代碼 return render(request,"index,html",{"name":"qinyj","hobby":["run","jump"]})
接收一個URL參數,意思是能夠重定向到指定的URL地址
例如:
def index(request): # 業務邏輯代碼 return redirect("https://www.baidu.com")