django框架基礎
內容:
1.課前復習
2.django路由規則
3.django視圖函數
4.django ORM
django預備知識:https://www.cnblogs.com/wyb666/p/9444150.html
django基礎參考:http://www.cnblogs.com/wupeiqi/articles/5237704.html
1.課前復習
1 一、 HTTP協議消息的格式: 2 請求(request): 3 請求方法 路徑 HTTP/1.1\r\n 4 k1:v1\r\n 5 ...\r\n 6 \r\n 7請求體 <-- 可以有,可以沒有 8 9 響應(response): 10 HTTP/1.1 狀態碼 狀態描述符\r\n 11 k1:v1\r\n 12 Content-Type: text/html; charset=utf8\r\n 13 \r\n 14 響應正文 <-- HTML內容 15 16 17 二、Python web框架的本質: 18 a. 收發socket消息 --> 按照HTTP協議消息格式去解析消息19 b. 路徑和要執行的函數的對應關系 --> 主要的業務邏輯 20 c. 字符串替換 --> 模板(特殊符號 --> 數據) 21 22 23 三、一個完整得請求流程: 24 0. 啟動服務端,等待客戶端(用戶的瀏覽器)來連接 25 1. 在瀏覽器地址欄輸入URL,與服務端建立連接,瀏覽器發送請求 26 2. 服務端收到請求消息,解析請求消息,根據路徑和函數的對應關系,找到將要執行的函數 27 3. 執行函數,打開HTML文件,進行字符串替換,得到一個最終要返回的HTML內容28 4. 按照HTTP協議的消息格式要求,把HTML內容回復給用戶瀏覽器(發送響應) 29 5. 瀏覽器收到響應的消息之後,按照HTML的規則渲染頁面. 30 6. 關閉連接
程序目錄:
2.django路由規則
在django程序中,可以通過urls.py文件對所有的url進行任務的分配,根據路由規則的定義選擇不同的業務處理函數進行處理
關於路由規則的詳細內容:https://www.cnblogs.com/CongZhang/p/5940794.html
1 1、單一路由對應: 2 url(r‘^index$‘, views.index), 3 url(r‘^index/‘, views.index), 4 5 6 2、基於正則的路由: 7 url(r‘^index/(\d*)‘, views.index), 8 url(r‘^manage/(?P<name>\w*)/(?P<id>\d*)‘, views.manage), 9 10 11 3、添加額外的參數: 12 url(r‘^manage/(?P<name>\w*)‘, views.manage,{‘id‘:333}), 13 14 15 4、為路由映射設置名稱: 16 url(r‘^home‘, views.home, name=‘h1‘), 17 url(r‘^index/(\d*)‘, views.index, name=‘h2‘), 18 設置名稱之後,可以在不同的地方調用,如: 19 模板中使用生成URL {% url ‘h2‘ 2012 %} 20 函數中使用生成URL reverse(‘h2‘, args=(2012,)) 路徑:django.urls.reverse 21 Model中使用獲取URL 自定義get_absolute_url() 方法: 22 class NewType(models.Model): 23 caption = models.CharField(max_length=16) 24 25 26 def get_absolute_url(self): 27 """ 28 為每個對象生成一個URL 29 應用:在對象列表中生成查看詳細的URL,使用此方法即可!!! 30 :return: 31 """ 32 # return ‘/%s/%s‘ % (self._meta.db_table, self.id) 33 # 或 34 from django.urls import reverse 35 return reverse(‘NewType.Detail‘, kwargs={‘nid‘: self.id}) 36 37 38 5、根據app對路由規則進行分類: 39 url(r‘^web/‘,include(‘web.urls‘)), 40 41 42 6、命名空間: 43 a. project.urls.py 44 from django.conf.urls import url,include 45 46 urlpatterns = [ 47 url(r‘^a/‘, include(‘app01.urls‘, namespace=‘author-polls‘)), 48 url(r‘^b/‘, include(‘app01.urls‘, namespace=‘publisher-polls‘)), 49 ] 50 51 b. app01.urls.py 52 from django.conf.urls import url 53 from app01 import views 54 55 app_name = ‘app01‘ 56 urlpatterns = [ 57 url(r‘^(?P<pk>\d+)/$‘, views.detail, name=‘detail‘) 58 ] 59 60 c. app01.views.py 61 def detail(request, pk): 62 print(request.resolver_match) 63 return HttpResponse(pk) 64 65 以上定義帶命名空間的url之後,使用name生成URL時候,應該如下: 66 v = reverse(‘app01:detail‘, kwargs={‘pk‘:11}) 67 {% url ‘app01:detail‘ pk=12 pp=99 %} 68 django中的路由系統和其他語言的框架有所不同,在django中每一個請求的url都要有一條路由映射,這樣才能將請求交給對一個的view中的函數去處理。其他大部分的Web框架則是對一類的url請求做一條路由映射,從而是路由系統變得簡潔
3.django視圖函數
一個視圖函數,簡稱視圖,是一個簡單的Python 函數,它接受Web請求並且返回Web響應。響應可以是一張網頁的HTML內容,一個重定向,一個404錯誤,一個XML文檔,或者一張圖片. . . 是任何東西都可以。無論視圖本身包含什麽邏輯,都要返回響應。
約定將視圖放置在項目或APP目錄中的名為views.py中(一般為了模塊化都是放在APP的views裏)
(1)最簡單的視圖函數
不論什麽視圖函數都包含兩個對象:
- request:用戶請求的相關所有信息,在django中是HttpRequest對象
- response:響應信息(字符串 or HTML or 圖片、、、),在django中是HttpResponse對象
最簡單的視圖函數:
1 from django.shortcuts import HttpResponse 2 3 def easy_view(request): 4 # 每個視圖函數都使用HttpRequest對象作為第一個參數,並且通常稱之為request 5 return HttpResponse("hello world!")
視圖函數,圍繞著兩個對象進行:HttpResponse和HttpRequest
(2)HttpRequest
屬性及方法:
1 request.path 獲取訪問文件路徑 2 request.method屬性 獲取請求中使用的HTTP方式(POST/GET) 3 request.body 含所有請求體信息 是bytes類型 4 request.GET GET請求的數據(類字典對象) 請求頭中的url中?後面拿值 5 request.POST POST請求的數據(類字典對象) 請求體裏拿值 6 7 request.FILES: 包含所有上傳文件的類字典對象;FILES中的每一個Key都是<input type="file" name="" />標簽中 8 name屬性的值,FILES中的每一個value同時也是一個標準的python字典對象,包含下面三個Keys: 9 filename: 上傳文件名,用字符串表示 10 content_type: 上傳文件的Content Type 11 content: 上傳文件的原始內容 12 13 request.user: 是一個django.contrib.auth.models.User對象,代表當前登陸的用戶。如果訪問用戶當前 14 沒有登陸,user將被初始化為django.contrib.auth.models.AnonymousUser的實例。你 15 可以通過user的is_authenticated()方法來辨別用戶是否登陸: 16 if req.user.is_authenticated();只有激活Django中的AuthenticationMiddleware 17 時該屬性才可用 18 19 request.COOKIES 包含所有cookies的標準Python字典對象;keys和values都是字符串。 20 request.session 唯一可讀寫的屬性,代表當前會話的字典對象;自己有激活Django中的session支持時該屬性才可用 21 22 request.GET.get(‘name‘) 拿到GET請求裏name的值 23 如果某個鍵對應有多個值,則不能直接用get取值,需要用getlist,如: 24 request.POST.getlist("hobby") 25 26 27 請求url:http://127.0.0.1:8000/index.html/23?a=1 28 request.path : 請求路徑 29 request.path結果為:/index.html/23 30 request.get_full_path() 31 request.get_full_path()結果為:/index.html/23?a=1
(3)HttpResponse
對於HttpRequest請求對象來說,是由django自動創建的,但是,HttpResponse響應對象就必須我們自己創建。每個view請求處理方法必須返回一個HttpResponse響應對象。HttpResponse類在django.http.HttpResponse
可以由HttpResponse對象上擴展出多種常用方法:
HttpResponse函數:
render函數:
redirect函數:
對比render和redirect:
4.django ORM
(1)什麽是ORM
(2)
(3)
django框架基礎