Django笔记01-基础:一个完美主义的web框架
淺談Web框架
一,什么是框架?
軟件框架就是為實(shí)現(xiàn)或完成某種軟件開發(fā)時(shí),提供了一些基礎(chǔ)的軟件產(chǎn)品,
框架的功能類似于基礎(chǔ)設(shè)施,提供并實(shí)現(xiàn)最為基礎(chǔ)的軟件架構(gòu)和體系
通常情況下我們依據(jù)框架來實(shí)現(xiàn)更為復(fù)雜的業(yè)務(wù)程序開發(fā)
一個(gè)字,框架就是程序的骨架
二,框架的優(yōu)缺點(diǎn)
可重用
成熟,穩(wěn)健
可擴(kuò)展性良好
選對框架很重要
三,python中常見的框架
大包大攬 Django 被官方稱之為完美主義者的Web框架。
力求精簡 web.py和Tornado
新生代微框架 Flask和Bottle
MVC設(shè)計(jì)模式
MVC實(shí)現(xiàn)了前后端和數(shù)據(jù)的分離,程序的解耦合,實(shí)現(xiàn)了程序的可擴(kuò)展性,可維護(hù)性
| Model | 模型 | 是針對數(shù)據(jù)庫層面的 | 程序調(diào)用模型,直接操作繼承model的模型對象 |
| View | 視圖 | 是針對用戶界面的數(shù)據(jù)顯示 | 模板(hmtl) |
| Controller | 控制器 | 針對業(yè)務(wù)邏輯的操作 | python程序 |
MVT
| M | Model | 模型 | 數(shù)據(jù)層 |
| V | View | 視圖 | 業(yè)務(wù)邏輯 |
| T | Template | 模板 | html |
起步
1. 認(rèn)識(shí)Django
Django是一個(gè)高級(jí)的Python Web框架,它鼓勵(lì)快速開發(fā)和清潔,務(wù)實(shí)的設(shè)計(jì)。
由經(jīng)驗(yàn)豐富的開發(fā)人員構(gòu)建,它負(fù)責(zé)Web開發(fā)的許多麻煩,因此您可以專注于編寫應(yīng)用程序,而無需重新創(chuàng)建輪子。
它是免費(fèi)的和開源的。
被官方稱之為完美主義者的Web框架。
Django可以更快地構(gòu)建更好的Web應(yīng)用程序并減少代碼。
官方網(wǎng)址:https://www.djangoproject.com/
中文文檔:http://python.usyiyi.cn/
2. Django框架的特點(diǎn):
快速開發(fā):Django的宗旨在于幫助開發(fā)人員快速從概念到完成應(yīng)用程序。
安全可靠:Django認(rèn)真對待安全性,幫助開發(fā)人員避免許多常見的安全錯(cuò)誤。
超可伸縮性: Web上的一些最繁忙的網(wǎng)站利用了Django快速靈活擴(kuò)展的能力。
3. Django可以使用什么Python版本?
| 1.8 | 2.7,3.2(直到2016年底),3.3, 3.4, 3.5 |
| 1.9, 1.10 | 2.7, 3.4, 3.5 |
| 1.11 | 2.7 , 3.4 , 3.5 , 3.6 |
| 2.0 | 3.5+ |
4. Django的開發(fā)版本
LTS : 長期穩(wěn)定版
- 2015 April 1.8
- 2017 April 1.11
- 2019 April 2.2
5. Django安裝
作為Python Web框架,Django需要Python,在安裝Python同時(shí)需要安裝pip。
# 在線安裝Django pip3 install Django # 檢測當(dāng)前是否安裝Django及版本 python3 -m django --version 1.11.7這里可以使用 -i 參數(shù)來指定鏡像源位置
6. 使用Django框架搭建項(xiàng)目
# 在一個(gè)目錄中執(zhí)行一下命令,就會(huì)創(chuàng)建一個(gè)web項(xiàng)目目錄 django-admin startproject web# 進(jìn)入到web文件夾中,執(zhí)行以下命令,啟動(dòng)項(xiàng)目 python3 manage.py runserver# 接下來就可以在瀏覽器中訪問了Django入門
創(chuàng)建一個(gè)應(yīng)用
python3 manage.py startapp home# 以上命令會(huì)在項(xiàng)目文件夾中創(chuàng)建一個(gè)目錄home請求的流程
用戶輸入url地址發(fā)起請求,服務(wù)器接受到請求后,交給跟路由(項(xiàng)目同名目錄下的urls.py)
使用模板文件
URLconf路由
路由的定義
URL ==> 統(tǒng)一資源定位符
指得就是請求的(URL)地址
http://python.itxdl.cn/html/tutorial/
http://python.itxdl.cn/html/teachers/
可以在項(xiàng)目中指定請求的url地址,來交給對應(yīng)的試圖函數(shù)進(jìn)行解析
路由的特點(diǎn)
路由就是在urls中進(jìn)行規(guī)則的配置
按照從上往下的順序來執(zhí)行
如果匹配到,則假裝指定的視圖函數(shù)來執(zhí)行
如果匹配不到,則拋出404 page not found
路由參數(shù)
路由參數(shù)就是在定義規(guī)則時(shí),使用小括號(hào)()括起來的內(nèi)容,將作為參數(shù)傳遞給視圖函數(shù)
# 路由規(guī)則 url(r'^article/(\d)$', views.article), # 視圖函數(shù) def article(request,para):return HttpResponse('接受到的參數(shù)是:'+para)命名組,命名參數(shù)
和路由參數(shù)一樣是用來獲取url中路徑作為參數(shù)來使用
不同的是,命名組會(huì)把當(dāng)前參數(shù)作為,關(guān)鍵字參數(shù)傳遞給視圖函數(shù),
因此對應(yīng)的視圖函數(shù),必須有關(guān)鍵字參數(shù)
指定用于視圖參數(shù)的默認(rèn)值
兩個(gè)路由指向同一個(gè)視圖函數(shù)
# 路由 url(r'^user/index/(?P<page>[0-9]+)/$', views.user_index), url(r'^user/index/$', views.user_index),# 視圖函數(shù) def user_index(request,page=1):print(page)return HttpResponse('用戶列表數(shù)據(jù)的顯示'+page)Model模型
數(shù)據(jù)庫配置
定義模型
在模型中定義屬性,會(huì)生成表中的字段
django會(huì)為表增加自動(dòng)增長的主鍵列,每個(gè)模型只能有一個(gè)主鍵列
如果使用選項(xiàng)設(shè)置某屬性為主鍵列后,則django不會(huì)再生成默認(rèn)的主鍵列
屬性命名限制
不能是python的保留關(guān)鍵字
由于django的查詢方式,不允許使用連續(xù)的下劃線
定義步驟
View視圖
Django中的視圖
Django具有“視圖”的概念來封裝負(fù)責(zé)處理用戶請求和返回響應(yīng)的邏輯
視圖函數(shù)或視圖簡而言之就是一個(gè)Python函數(shù),它接受一個(gè)Web請求并返回一個(gè)Web響應(yīng)
此響應(yīng)可以是網(wǎng)頁的HTML內(nèi)容,重定向或404錯(cuò)誤,XML文檔或圖像。
為了將代碼放在某處,慣例是將視圖views.py放在名為的文件中,放在項(xiàng)目或應(yīng)用程序目錄中
在視圖函數(shù)中使用模型
url 統(tǒng)一資源定位符
http://127.0.0.1:8000/user/abc?a=1&b=2
協(xié)議:http https file svn
ip或域名 127.0.0.1 www.itxdl.cn
端口: 80 443 8000 5000 8080
路徑: /user/abc
參數(shù): ?a=1&b=2
模型的操作
# 1查詢 # 獲取當(dāng)前模型中所有的對象數(shù)據(jù) # 結(jié)果為一個(gè)查詢集 obs = models.Stu.objects.all() # 根據(jù)id獲取當(dāng)前對象 結(jié)果 對象 ob = models.Stu.objects.get(id=1) # 注意:get方法能且只能返回一個(gè)對象 # 查多個(gè)報(bào)錯(cuò),查不到也報(bào)錯(cuò)# 2添加 # 第一中方法 data = {'name':'admin','age',20} ob = models.Stu(**data) ob.save() # 第二種方法 ob = models.Stu() ob.name = 'zhangsan' ob.age = 20 ob.save()# 推薦第一種 # 3刪除 # 獲取對象.執(zhí)行刪除 ob.delete())# 4更新 ob.name = 'aabb' ob.save())增刪改查
用戶管理
先定義一個(gè)視圖函數(shù) 顯示添加表單
表單吧數(shù)據(jù)提交到 執(zhí)行數(shù)據(jù)添加的函數(shù)中
完成后跳轉(zhuǎn)到 用戶列表的視圖函數(shù)中
刪除鏈接提交到 一個(gè)執(zhí)行用戶刪除的視圖函數(shù)中k,完成后跳轉(zhuǎn)列表頁面
編輯鏈接提交到 一個(gè)顯示用戶數(shù)據(jù)的修改表單中
修改表單吧數(shù)據(jù) 提交到執(zhí)行數(shù)據(jù)更新的視圖函數(shù)中
這6個(gè)步驟對應(yīng)6個(gè)路由
# 用戶數(shù)據(jù)的管理 url(r'stu/index$',views.stu_index,name='stu_index'), # 執(zhí)行用戶的添加 url(r'stu/insert$',views.stu_insert,name='stu_insert'), # 顯示添加的表單 url(r'stu/add$',views.stu_add,name='stu_add'), # 執(zhí)行用戶的刪除 url(r'stu/del$',views.stu_del,name='stu_del'), # 用戶的編輯表單 url(r'stu/edit$',views.stu_edit,name='stu_edit'), # 執(zhí)行用戶數(shù)據(jù)的更新 url(r'stu/update$',views.stu_update,name='stu_update'),生成遷移文件時(shí),還沒有吧應(yīng)用添加到配置文件中?
如果已經(jīng)生成遷移文件,則直接執(zhí)行遷移就可以,
另外注意,生成的遷移文件不要輕易刪除
模型定義
class User(models.Model):pass在這里已經(jīng)說了
模型更改問題
如果模型已經(jīng)創(chuàng)建好了一個(gè)表,你再模型中在增加一個(gè)字段,在生成遷移文件的時(shí)候就會(huì)報(bào)出
新增的一個(gè)字段時(shí)注意,如果當(dāng)前新增的字段不允許為空,并且沒有設(shè)置默認(rèn)值,
則會(huì)在生成遷移時(shí)
翻譯過來是:
就是說,你加了一個(gè)字段,還說不能為空,然后那我之前還有挺多數(shù)據(jù)呢,這可咋整啊 您還想添加一個(gè)非空字段,還沒有默認(rèn),是不是傻?選擇一個(gè)修復(fù)吧,趕緊的:1)提供一個(gè)一次性的值2)退出,修改當(dāng)前新增字段1. 設(shè)置默認(rèn)值2. 允許為空就算你表中沒有數(shù)據(jù),他也會(huì)這樣問,以為他傻,他不知道你有沒有數(shù)據(jù),他也不能知道,也不需要知道
Django學(xué)習(xí)中遇到的問題(1)django migration No migrations to apply
Template模板
模板概念
作為Web 框架,Django 需要一種很便利的方法以動(dòng)態(tài)地生成HTML。最常見的做法是使用模板。
模板包含所需HTML 輸出的靜態(tài)部分,以及一些特殊的語法,描述如何將動(dòng)態(tài)內(nèi)容插入。
模板語法
1.變量
-
變量輸出語法{{ var }}
-
當(dāng)模版引擎遇到一個(gè)變量,將計(jì)算這個(gè)變量,然后將結(jié)果輸出
-
變量名必須由字母、數(shù)字、下劃線(不能以下劃線開頭)和點(diǎn)組成
-
當(dāng)模版引擎遇到點(diǎn)("."),會(huì)按照下列順序查詢:
- 字典查詢,例如:foo[“bar”]
- 屬性或方法查詢,例如:foo.bar
- 數(shù)字索引查詢,例如:foo[bar]
-
如果變量不存在, 模版系統(tǒng)將插入’’ (空字符串)
-
在模板中調(diào)用方法時(shí)不能傳遞參數(shù)
2.標(biāo)簽
- 語法{ % tag % }
- 作用
- 在輸出中創(chuàng)建文本
- 控制循環(huán)或邏輯
- 加載外部信息到模板中
for標(biāo)簽
{ % for ... in ... % }循環(huán)邏輯 { % endfor % }if標(biāo)簽
{ % if ... % }邏輯1 { % elif ... % }邏輯2 { % else % }邏輯3 { % endif % }comment標(biāo)簽
{ % comment % }多行注釋 { % endcomment % }include:加載模板并以標(biāo)簽內(nèi)的參數(shù)渲染
{ % include "base/index.html" % }url:反向解析
{ % url 'name' p1 p2 % }csrf_token:這個(gè)標(biāo)簽用于跨站請求偽造保護(hù)
{ % csrf_token % }Django框架自帶的后臺(tái)
在瀏覽器訪問 admin
http://127.0.0.1:8000/admin/
需要登錄,因此要?jiǎng)?chuàng)建一個(gè)超級(jí)用戶
在命令行執(zhí)行下一個(gè)命令進(jìn)行創(chuàng)建
python3 manage.py createsuperuser
重新啟動(dòng)服務(wù)后 ,使用創(chuàng)建的用戶進(jìn)行后臺(tái)的登錄
配置settings.py文件,配置語言和時(shí)區(qū)
總結(jié)
以上是生活随笔為你收集整理的Django笔记01-基础:一个完美主义的web框架的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: GOOGLE本地搜索
- 下一篇: 微信科室预约挂号小程序