第1章 Web應用
1.1什麼是web應用程序?
Web 應用程序就是一種可以通過web訪問的應用程序,程序的最大好處就是用戶很容易訪問程序,因爲用戶只需要有瀏覽器即可,不需要安裝其他軟件
應用程序有兩種模式C/S,客戶端和服務端,B/S,是瀏覽器和服務端,這類應用程序一般藉助瀏覽器來運行,web應用程序一般是B/S模式
第2章 Web框架:
2.1什麼是web框架?
Web框架是一種開發框架,用來支持動態網站,網絡應用和網絡服務的開發,着大多數的web框架提供了一套開發和部署網站的方式,也是爲了web行爲提供了一套通用的方法,web框架已經實現了很多功能,開發人員使用框架提供的方法並且完成自己的業務邏輯,就能快速開發web應用了
2.2Python中的web框架:
Django 大而全
Flask 輕量級
Tornado 高性能
第3章 Django簡介與安裝使用
3.1MVC與MTV模型
MVC
Web應用開發裏著名的MVC模式,就是吧web應用分爲:模型(M),控制器(C),視圖(V)三層,他們之間以一種插件式的,鬆耦合的方式聯繫在一起,模型負責業務對象與數據庫的映射(ORM),試圖負責與用戶的交互,控制器接受用戶的調用模型和試圖完成用戶的請求
MTV
Django的MTV本質上和MVC是一樣的,只是定義上有些許不同
1. M代表(model):負責業務和數據庫的關係映射(ORM)
2. T代表(template):負責如何把頁面展示給用戶(html)
3. V代表視圖(view):負責業務邏輯,並在適當的時候調用model和template
4. 除了以上三層之外,還需要一個url分發器,他的作用是將一個個的url的頁面請求分發給不同的view處理,view在調用相應的model和template,MTV響應模式如下
3.2什麼是Django?
Django是一個web框架,web框架的本質就是一個socket服務端
3.3Django的安裝與使用
Ø 安裝django
pip3 install django==1.11.9 -i http://pypi.hustunique.org/simple
Ø 創建一個django項目
django-admin startproject mydjango
Ø 文件說明:
manage.py----django項目的工具,通過他可以調用django shell和數據庫等
settings.py----包含了項目的默認設置,包括數據庫信息,調試標誌以及其他一些工作的變量
urls.py----負責把url模式映射到應用程序
Ø Django目錄下創建應用:
python3 manage.py startapp app01
Ø 啓動django項目
python3 manage.py runserver 8000
3.4Django簡單示例:
url控制器
from django.conf.urlsimport url
from django.contribimport admin
from app01import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^index/', views.index),
]
視圖:
# Create your views here.
def index(request):
returnrender(request,'index.html')
模版
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div>hello</div>
</body>
</html>
3.5新手三件套:
from django.shortcuts import render,HttpResponse,redirect
# Create your views here.
def index(request):
#向瀏覽器返回字符串
#return HttpResponse('hello web')
#向瀏覽器返回頁面
#return render(request,'index.html')
#返回重定向
return redirect('http://www.baidu.com')
3.6Django的path問題
Ø 在1.X中
使用url,而且是支持正則
Ø 在2.X中
re_path就是1.X中的url
2.X中的path是新增的,但是url的方式也支持
path('準確路徑',views.test,name='test')
第4章 路由
4.1django中路由的作用:
url配置就像django所支撐的目錄,它的本質是url與要爲該url調用的試圖函數之間的映射表,你就是以這種方式告訴django,對於客戶端發來的某個url調用那一段邏輯代碼對應執行
4.2無名分組
括號內的內容會被分組分出來,當作參數,以位置參數的形式傳到視圖函數,視圖函數應該接受這些參數
urls
urlpatterns= [
url(r'^admin/', admin.site.urls),
url(r'^index/(\d+)/(\d+)', views.index),
]
views
def index(request,res):
print(res)
return HttpResponse('hello')
4.3有名分組
括號內的內容會被分組分出來,當作參數,以關鍵字參數的形式傳到視圖函數,視圖函數應該接受這些參數
urls
urlpatterns= [
url(r'^admin/', admin.site.urls),
url(r'^index/(?<m1>\d+)/(?<m2>\d+)',views.index),
]
views
def index(request,m1,m2):
print(m1,m2)
return HttpResponse('hello')
4.4反向解析:
Ø 在不使用反向解析,想達到訪問index的時候跳轉到test頁面上需要這樣做
urls
from app01import views
urlpatterns = [
url(r'^test/', views.test),
url(r'^index/', views.index),
]
views
def index(request):
return redirect('/test/')
def test(requset):
return HttpResponse('我是test首頁')
Ø 上面的方法可以看出來,如果urls中的目錄地址更換,那麼後面views中跳轉的地址全部需要更改,爲了簡化這個操作,就要用到反向解析了
urls
urlpatterns= [
url(r'^test/$', views.test,name='test'),
url(r'^index/$', views.index),
]
views
def index(request):
url=reverse('test')
return redirect(url)
def test(requset):
return HttpResponse('我是test首頁')
Ø 反向解析在模版中的使用:
urls
urlpatterns= [
url(r'^test/$', views.test,name='test'),
url(r'^index/$', views.index),
]
views
def index(request):
return render(request,'index.html')
def test(requset):
return HttpResponse('我是test首頁')
html
<body>
<div>Django的index頁面</div>
<a href="{% url 'test' %}">點擊進入test頁面</a>
</body>
4.5路由分發:對多個app進行管理
1. 創建第二個app
python3 manage.py startapp app02
2. 在settings中進行註冊:
INSTALLED_APPS= [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app01',
'app02',
]
3. 在總路由中
#導入include模塊
from django.conf.urlsimport url,include
from django.contribimport admin
#app總入口
urlpatterns = [
url(r'^app01/', include('app01.urls')),
url(r'^app02/', include('app02.urls'))
]
4. 在不同app下
app01
from django.conf.urlsimport url
from django.contrib import admin
from app01 import views
urlpatterns = [
url(r'^app01test/', views.test),
]
app02
from django.conf.urlsimport url
from django.contrib import admin
from app02 import views
urlpatterns = [
url(r'^app02test/', views.test),
]
app01
from django.shortcutsimport render,HttpResponse,redirect,reverse
# Create your views here.
def test(requset):
returnHttpResponse('我是app01的test頁面')
app02
from django.shortcutsimport render,HttpResponse,redirect
# Create your views here.
def test(request):
returnHttpResponse('我是app02的test頁面')
第5章 視圖層
5.1請求對象requset
#requset是一個對象,請求對象
#請求的方法
print(requset.method)
#請求地址
print(requset.path)
#請求全路徑
print(requset.get_full_path())
#get方式傳遞的參數
print(requset.GET)
return HttpResponse('我是index頁面')
5.2向前端返回一個json格式字符串的兩種方式:
1. 利用json模塊
import json
# Create your views here.
def index(requset):
data={'name':'jiang','age':10}
returnHttpResponse(json.dumps(data))
2. 利用jsonRequest
from django.httpimport JsonResponse
# Create your views here.
def index(requset):
data={'name':'jiang','age':10}
returnJsonResponse(data,safe=False)
5.3文件上傳案例:
html
<body>
<form action="" method="post" enctype="multipart/form-data">
<p>
<input type="file" name="myfile">
</p>
<input type="submit" value="提交">
</form>
</body>
urls
from app01import views
urlpatterns = [
url(r'^index/', views.file_upload),
]
views
rom django.shortcutsimport render,HttpResponse,redirect,reverse
# Create your views here.
def file_upload(requset):
ifrequset.method == "GET":
returnrender(requset,'index.html')
files=requset.FILES
myfile=files.get('myfile')
withopen(myfile.name,'wb') as f:
forline inmyfile:
f.write(line)
returnHttpResponse('文件上傳成功')
第6章 模版層
6.1模版語言語法:
變量:{{變量名}}
1. 深度查詢,用點號
2. 過濾器
標籤:{{% %}}
6.2簡單使用:
html
<body>
{{ time }}
</body>
views
import time
# Create your views here.
def index(requset):
ctime=str(time.time())
returnrender(requset,'index.html',{'time':ctime})
6.3locals用法:
<body>
<p>{{ ctime }}</p>
<p>{{ dic }}</p>
<p>{{ dic.name }}</p>
</body>
views
def index(requset):
ctime=str(time.time())
dic={'name':'jiang','age':10}
# return render(requset,'index.html',{'time':ctime,'dic':dic})
#會把該函數中所有的變量,構造成字典,傳到模版中
returnrender(requset,'index.html',locals())