表關係的創建方式
表與表之間的關係就三種
一對一 OneToOne(to='') # to後面能夠跟字符串的表名 也能夠直接跟變量名錶名(該表名必須在上面提早定義出來)
一對多 ForeignKey(to='')
多對多 ManyToMany(to='')
本身必定要會三種關係的推導步驟 以及建表的注意事項前端
一對一和多對多外鍵字段 建在哪一方均可以 可是推薦你建在查詢頻率較高的一方 以便後續的orm查詢 一對多外鍵字段 建在多的那一方 一對一和一對多外鍵字段 在建立表的時候回自動加_id後綴 不管你有沒有加 多對多字段不會在表中建立出來 只是用來告訴orm自動幫你建立第三張表 可以方便後續orm查詢操做 django請求生命週期流程圖 路由層 url方法第一個參數是一個正則表達式 匹配的特色:只要正則表達式可以匹配到內容 那麼會馬上結束匹配 直接執行後面所對應的視圖函數 正是因爲該特色會出現,當你的項目特別龐大的時候 可能會出現url被頂替的現象(test testadd) 若是出現上述狀況 1.修改正則表達式 2.將下面的放到上面去 django在路由匹配的時候默認有一個補救機制 當你的url沒有正常匹配到 django會讓瀏覽器自動加斜槓再來匹配一次(重定向) 配置文件中有一個參數用來控制該機制是否容許 APPEND_SLASH = True/False 網站首頁能夠使用的匹配方式 # 網站首頁 url(r'^$',home), # 網站404頁面的設計(瞭解) url(r'',error) 路由匹配 無名分組 給正則表達式加括號分組 在路由匹配成功以後調用視圖函數的時候 會將括號內正則表達式匹配到的內容當作位置參數傳遞給視圖函數 url(r'^index/(\d+)/',index) # index(request,\d+內容) 有名分組 給正則表達式加括號分組並起別名 在路由匹配成功以後調用視圖函數的時候 會將括號內正則表達式匹配到的內容當作關鍵字傳遞給視圖函數 url(r'^index/(?P<year>\d+)/',index) # index(request,year=\d+內容) 注意事項 無名有名不能混合 可是單個狀況下 能夠使用屢次 反向解析 本質:根據別名 動態解析出一個結果 該結果能夠直接訪問到別名所對應的url 沒有正則表達式符號 url(r'^index/',views.index,name='xxx') 前端 {% url 'xxx' %} # index/ 後端 from django.shortcuts import reverse reverse('xxx') # index/ 出現正則表達式符號 # 無名分組 url(r'^index/(\d+)/',views.login,name='yyy') # index/數字/ 前端 {% url 'yyy' 數字 %} # index/數字/ 後端 reverse('xxx',args=(數字,)) # 只要是容器類型 內部就算只有一個元素 你也給我習慣性的把分隔符逗號加上 # 有名分組 # 你能夠直接使用無名分組的方式便可 前端 {% url 'yyy' 名字=數字 %} # index/數字/ 後端 reverse('xxx',keargs={'名字':數字}) 路由分發 前提 全部的app均可以有本身獨立的urls.py templates模板文件夾 static靜態文件夾 正是因爲該特色 使得基於django實現多人開發 很是的方便 每一個人只須要開發本身的app便可 路由分發 總路由再也不直接作路由與視圖函數對應關係了 而是僅僅作一個轉發的功能 好處:更加的解耦合 更加好維護 from django.conf.urls import url,include url(r'^應用名1/',include('應用名1.urls')) url(r'^應用名2/',include('應用名2.urls')) 名稱空間 當不一樣的應用中給路由與視圖對應關係起了相同的別名 在反向解析的時候 並不能直接識別到是哪一個應用下的 url(r'^應用名1/',include('應用名1.urls',namespace='應用名')) {% url '應用名1:相同的別名' %} {% url '應用名2:相同的別名' %} reverse('應用名1:相同的別名') reverse('應用名2:相同的別名') # 其實你徹底能夠不適用名稱空間 # 你只須要保證在起別名的時候不要出現衝突便可 建議作法就是加 應用前綴_別名 虛擬環境 給每個項目提供一個專門屬於該項目本身的所需模塊 避免浪費 節省資源 requirement.txt django==1.11.11 Flask==1.4 建議不要頻繁的開設虛擬環境 django版本區別 path與url path第一個參數不支持正則 若是你還想使用正則 你能夠re_path跟你的url如出一轍 path雖然不支持正則 可是提供了五個默認的轉換器 可以自動幫你轉換數據類型 還支持用戶自定義轉換器(不要記憶 直接拷貝便可) request方法獲取文件數據 request.FILES 獲取form表單上傳的文件數據 file_obj = request.FILES.get('myfile') file_obj.name 文件名 f = open(file.obj.name,'wb') for chunk in file_obj.chunks(): # for line in file_obj: f.write(chunk) f.close()