1.Django簡介
????Django是一個開放源代碼的Web應(yīng)用框架,它最初是被開發(fā)來用于管理勞倫斯出版集團(tuán)旗下的一些以新聞內(nèi)容為主的網(wǎng)站的,即是CMS(內(nèi)容管理系統(tǒng))軟件柠偶。并于2005年7月在BSD許可證下發(fā)布与境。這套框架是以比利時的吉普賽爵士吉他手Django Reinhardt來命名的晾剖。
????重量級的框架,替開發(fā)者想了太多的事情,幫開發(fā)者做了很多的選擇,內(nèi)置了很多的功能
官方網(wǎng)站 http://www.djangoproject.com
2.?為什么選擇Django框架雁芙?
--->?源于真實(shí)的CMS系統(tǒng)的項(xiàng)目
--->?生態(tài)圈非常繁榮?
--->?大部分功能都有成熟的解決方案
3.?創(chuàng)建Django項(xiàng)目和實(shí)施版本控制
~?pip3?install?django==2.2.12?-i https://pypi.doubanio.com/simple
(這里選擇Django最新版本)
~?django-admin?--version
(查看版本)
~?django-admin?startproject?hellodjango(項(xiàng)目名字)
(創(chuàng)建Django項(xiàng)目)
4.?創(chuàng)建Django應(yīng)用
~?一個Django項(xiàng)目中可以包含一個或多個Django應(yīng)用
創(chuàng)建一個應(yīng)用 python manage.py startapp App/django-admin startapp App
App結(jié)構(gòu)
~__init__
~views 視圖函數(shù)
?????視圖函數(shù)種參數(shù)是request 方法的返回值類型是HttpResponse models 模型
~admin 后臺管理
~apps 應(yīng)用配置
~tests 單元測試
~migrations /__init__ 遷移目錄
5.?編寫視圖函數(shù)
~views.py?--->?視圖函數(shù)(接收來自瀏覽器的請求,給用戶以響應(yīng))
def?show_index(request:?HttpRequest):
? ? ? ?return?HttpResponse(content)
6.?配置URL
~?使用視圖函數(shù)需要配置URL映射(請求的路由)?--->urls.py
~?URL(統(tǒng)一資源定位符)?--->?視圖函數(shù)?--->?path函數(shù)
????path('hello/',?show_index),
7.?前端渲染
~前端渲染?--->?在瀏覽器中完成渲染操作
前端通過Ajax請求獲得后端提供的數(shù)據(jù)钞螟,通過JavaScript代碼用數(shù)據(jù)渲染頁面
8.后端渲染
~ 后端渲染?--->?在服務(wù)器端用Python程序完成
把前端提供的靜態(tài)頁改造成模板頁兔甘,把動態(tài)內(nèi)容換成占位符,通過Python程序把動態(tài)內(nèi)容填入模板頁
顯示在模板中
~先挖坑 {{ var }}
~ 再填坑
????????渲染模板的時候傳遞上下文進(jìn)來
????????上下文是一個字典
????????ontext={'key':'value'}
~模板的兼容性很強(qiáng)
????????不傳入不會報(bào)錯
????????多傳入也會自動優(yōu)化掉
~瀏覽器不認(rèn)模板
???????瀏覽器也叫做html解析器? ?只識別html文件????
????????在到達(dá)瀏覽器之前鳞滨,已經(jīng)進(jìn)行了轉(zhuǎn)換洞焙,將模板語言轉(zhuǎn)換成了HTML
~for 支持
???????{% for %}
~render底層實(shí)現(xiàn):應(yīng)用場景,發(fā)送郵件太援,郵件的內(nèi)容需要使用render方法來操縱
????加載
????????????three_index = loader.get_template('three.html')
????????????content={'xxx':'xxxx'}
????渲染
? ? ? ? ? ? ?result = three_index.render(content=content)
? ? ? ? ? ? ?return HttpResponse(result)
9.修改數(shù)據(jù)庫
在settings中的DATABASES中進(jìn)行修改
實(shí)際上都是關(guān)系型數(shù)據(jù)庫
????mysql
????????'ENGINE': 'django.db.backends.mysql',
? ? ? ? NAME(數(shù)據(jù)庫名字)
????????USER(用戶名字)
????????PASSWORD(密碼 )
????????HOST (主機(jī) )
????????PORT(端口號 )
? ? ? ? CHARSET(字符集)
10.DML
數(shù)據(jù)操作
? ? ?~遷移
????????生成遷移
????????????python manage.py makemigrations
????????執(zhí)行遷移
????????????python manage.py migrate
????????????才會真正在數(shù)據(jù)庫產(chǎn)生表
? ? ?~ORM
????????????Object Relational Mapping 對象關(guān)系映射
????????????將業(yè)務(wù)邏輯和sql進(jìn)行了一個解耦合
????????????通過models定義實(shí)現(xiàn)? 數(shù)據(jù)庫表的定義
? ? ?~模型定義
????????????(1)繼承models.Model
????????????(2)會自動添加主鍵列
????????????(3)必須指定字符串類型屬性的長度
????????????????????class Student(models.Model):
? ? ? ? ? ? ? ? ???????????? name = modes.CharField(max_length=16)
? ? ? ? ? ? ? ? ???????????? age = models.IntegerField(default=1)
? ? ?~存儲數(shù)據(jù)
????????????創(chuàng)建對象進(jìn)行save()
? ? ?~數(shù)據(jù)查詢
????????????模型.objects.all()
????????????模型.objects.get(pk=2)
? ? ?~更新
????????????基于查詢
????????????save()
? ? ?~刪除
????????????基于查詢
????????????delete()
10.Django shell
python manage.py shell
????????django 終端
????????????????python manager.py shell
????????集成了django環(huán)境的python 終端
????????通常用來調(diào)試
????????eg:
????????from Two.models import Student
????????students = Student.objects.all()
? ????????? ????for student in students:
? ? ? ? ? ????????? print(students.name)
11.?運(yùn)行Django項(xiàng)目
~?Django自帶的測試服務(wù)器
~?python manage.py?runserver