国产精品久久国产精麻豆99网站,激烈18禁高潮视频免费,老师含紧一点h边做边走视频动漫,双乳被一左一右的吸着

Python學習教程(Python學習路線):前后端分離開發(fā)入門(python前后端不分離)

今天這期的Python學習教程跟大家聊聊前后端分離開發(fā),入門的先帶大家熟悉掌握一遍!

在傳統(tǒng)的Web應用開發(fā)中,大多數(shù)的程序員會將瀏覽器作為前后端的分界線。將瀏覽器中為用戶進行頁面展示的部分稱之為前端,而將運行在服務器,為前端提供業(yè)務邏輯和數(shù)據(jù)準備的所有代碼統(tǒng)稱為后端。所謂前后端分離的開發(fā),就是前后端工程師約定好數(shù)據(jù)交互接口,并行的進行開發(fā)和測試,后端只提供數(shù)據(jù),不負責將數(shù)據(jù)渲染到頁面上,前端通過HTTP請求獲取數(shù)據(jù)并負責將數(shù)據(jù)渲染到頁面上,這個工作是交給瀏覽器中的JavaScript代碼來完成。

使用前后端分離開發(fā)有諸多的好處,下面我們簡要的說下這些好處:

  1. 提升開發(fā)效率。前后端分離以后,可以實現(xiàn)前后端代碼的解耦,只要前后端溝通約定好應用所需接口以及接口參數(shù),便可以開始并行開發(fā),無需等待對方的開發(fā)工作結束。在這種情況下,前后端工程師都可以只專注于自己的開發(fā)工作,有助于打造出更好的團隊。除此之外,在前后端分離的開發(fā)模式下,即使需求發(fā)生變更,只要接口與數(shù)據(jù)格式不變,后端開發(fā)人員就不需要修改代碼,只要前端進行變動即可。
  2. 增強代碼的可維護性。前后端分離后,應用的代碼不再是前后端混合,只有在運行期才會有調(diào)用依賴關系,這樣的話維護代碼的工作將變得輕松愉快很多,再不會牽一發(fā)而動全身。當你的代碼變得簡明且整潔時,代碼的可讀性和可維護性都會有質(zhì)的提升。
  3. 支持多終端和服務化架構。前后端分離后,同一套數(shù)據(jù)接口可以為不同的終端提供服務,更有助于打造多終端應用;此外,由于后端提供的接口之間可以通過HTTP(S)進行調(diào)用,有助于打造服務化架構(包括微服務)。

接下來我們就用前后端分離的方式來改寫之前的投票應用。

Python學習教程(Python學習路線):前后端分離開發(fā)入門(python前后端不分離)

返回json格式的數(shù)據(jù)

剛才說過,在前后端分離的開發(fā)模式下,后端需要為前端提供數(shù)據(jù)接口,這些接口通常返回JSON格式的數(shù)據(jù)。在Django項目中,我們可以先將對象處理成字典,然后就可以利用Django封裝的JsonResponse向瀏覽器返回JSON格式的數(shù)據(jù),具體的做法如下所示。

def show_subjects(request): queryset = Subject.objects.all() subjects = [] for subject in queryset: subjects.append({ \’no\’: subject.no, \’name\’: subject.name, \’intro\’: subject.intro, \’isHot\’: subject.is_hot }) return JSONResponse(subjects, safe=False)

上面的代碼中,我們通過循環(huán)遍歷查詢學科得到的QuerySet對象,將每個學科的數(shù)據(jù)處理成一個字典,在將字典保存在名為subjects的列表容器中,最后利用JsonResponse完成對列表的序列化,向瀏覽器返回JSON格式的數(shù)據(jù)。由于JsonResponse序列化的是一個列表而不是字典,所以需要指定safe參數(shù)的值為False才能完成對subjects的序列化,否則會產(chǎn)生TypeError異常。

可能大家已經(jīng)發(fā)現(xiàn)了,自己寫代碼將一個對象轉(zhuǎn)成字典是比較麻煩的,如果對象的屬性很多而且某些屬性又關聯(lián)到一個比較復雜的對象時,情況會變得更加糟糕。為此我們可以使用一個名為bpmappers的三方庫來簡化將對象轉(zhuǎn)成字典的操作,這個三方庫本身也提供了對Django框架的支持。

安裝三方庫bpmappers。

pip install bpmappers

編寫映射器(實現(xiàn)對象到字典轉(zhuǎn)換)。

from bpmappers.djangomodel import ModelMapperfrom poll2.models import Subjectclass SubjectMapper(ModelMapper): class Meta: model = Subject

修改視圖函數(shù)。

def show_subjects(request): queryset = Subject.objects.all() subjects = [] for subject in queryset: subjects.append(SubjectMapper(subject).as_dict()) return JsonResponse(subjects, safe=False)

配置URL映射,然后訪問該接口,可以得到如下所示的JSON格式數(shù)據(jù)。

[ { \”no\”: 101, \”name\”: \”Python全棧 人工智能\”, \”intro\”: \”Python是一種計算機程序設計語言。是一種面向?qū)ο蟮膭討B(tài)類型語言,最初被設計用于編寫自動化腳本(shell),隨著版本的不斷更新和語言新功能的添加,越來越多被用于獨立的、大型項目的開發(fā)。\”, \”create_date\”: \”2017-08-01\”, \”is_hot\”: true }, // 此處省略下面的內(nèi)容]

如果不希望在JSON數(shù)據(jù)中顯示學科的成立時間,我們可以在映射器中排除create_date屬性;如果希望將是否為熱門學科對應的鍵取名為isHot(默認的名字是is_hot),也可以通過修改映射器來做到。具體的做法如下所示:

from bpmappers import RawFieldfrom bpmappers.djangomodel import ModelMapperfrom poll2.models import Subjectclass SubjectMapper(ModelMapper): isHot = RawField(\’is_hot\’) class Meta: model = Subject exclude = (\’create_date\’, \’is_hot\’)

再次查看學科接口返回的JSON數(shù)據(jù)。

[ { \”no\”: 101, \”name\”: \”Python全棧 人工智能\”, \”intro\”: \”Python是一種計算機程序設計語言。是一種面向?qū)ο蟮膭討B(tài)類型語言,最初被設計用于編寫自動化腳本(shell),隨著版本的不斷更新和語言新功能的添加,越來越多被用于獨立的、大型項目的開發(fā)。\”, \”isHot\”: true }, // 此處省略下面的內(nèi)容]

關于bpmappers詳細的使用指南,請參考它的官方文檔,這個官方文檔是用日語書寫的,可以使用瀏覽器的翻譯功能將它翻譯成你熟悉的語言即可。

使用Vue.js渲染頁面

關于Vue.js的知識,我們前面蠻久前的一期Python學習教程中已經(jīng)詳細的介紹過了,這里我們不再進行贅述。如果希望全面的了解和學習Vue.js,建議閱讀它的官方教程或者在YouTube上搜索Vue.js的新手教程(Crash Course)進行學習。

重新改寫subjects.html頁面,使用Vue.js來渲染頁面。

<!DOCTYPE html><html lang=\”en\”><head> <meta charset=\”UTF-8\”> <title>學科</title></head><body> <h1>所有學科</h1> <hr> <div id=\”app\”> <div v-for=\”subject in subjects\”> <h3> <a :href=\”getTeachersHref(subject.no)\”>{{ subject.name }}</a> <img v-if=\”subject.isHot\” src=\”/static/images/hot.png\” width=\”32\”> </h3> <p>{{ subject.intro }}</p> </div> </div> <script src=\”https://cdn.bootcss.com/vue/2.6.10/vue.min.js\”></script> <script> const app = new Vue({ el: \’#app\’, data: { subjects: [] }, created() { fetch(\’/subjects/\’) .then(resp => resp.json()) .then(json => this.subjects = json) }, methods: { getTeachersHref(sno) { return `/static/teachers.html/?sno=${sno}` } } }) </script></body></html>

前后端分離的開發(fā)需要將前端頁面作為靜態(tài)資源進行部署,項目實際上線的時候,我們會對整個Web應用進行動靜分離,靜態(tài)資源通過Nginx或Apache服務器進行部署,生成動態(tài)內(nèi)容的Python程序部署在uWSGI或者Gunicorn服務器上,對動態(tài)內(nèi)容的請求由Nginx或Apache路由到uWSGI或Gunicorn服務器上。

在開發(fā)階段,我們通常會使用Django自帶的測試服務器,如果要嘗試前后端分離,可以先將靜態(tài)頁面放在之前創(chuàng)建的放靜態(tài)資源的目錄下。

關于前后端分離開發(fā)的Python學習教程,也會繼續(xù)為大家更新!有哪些不清楚的地方,伙伴們也可以留言!

版權聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權/違法違規(guī)的內(nèi)容, 請發(fā)送郵件至 舉報,一經(jīng)查實,本站將立刻刪除。

花火视频影视大全免费观看| 成人性生交大片免费看中文| 成熟女人特级毛片WWW免费| 国产98色在线 | 国产| 99久久国产露脸精品竹菊传媒| 成人99精品久久毛片a片小说| 欧美大屁股xxxxhd黑色| 欧美成人精品第一区二区三区| 久久www香蕉免费人成| 大乳videos巨大吃奶| 年级老师的滋味3中字视频| 国产欧美精品123区发布| 麻豆蜜桃69无码专区在线| 唐三偷喝宁荣荣乳液污黄文| 亚洲av鲁丝一区二区三区| 学长上课揉搓捏掐我奶h| 欧美丰满熟妇bbbbbb| 大学生第一次破女处视频| 岳把我用嘴含进满足我视频| 风间ゆみの熟女俱乐部| 欧美肉大捧一进一出免费视频 | 97精品一区二区视频在线观看| 国产又色又爽又刺激在线播放| 亚洲线精品一区二区三区影音先锋| 中文字幕人妻色偷偷久久| 天天夜夜草草久久伊人69堂| 国产无遮挡裸体免费视频a片| 色 综合 欧美 亚洲 国产| 国产毛a片啊久久久久久保和丸| 免费夜色污私人影院在线观看| 大香煮伊区一二三四区2021 | 国产成人一区二区三区影院动漫| 性视频播放免费视频| 四虎成人精品无码永久在线| 小粉嫩精品a片在线视看| 精品人妻系列无码人妻在线不卡 | 女人扒开屁股爽桶30分钟| 69国产成人精品午夜福中文 | 中文字幕久久久人妻无码| 在野外自慰和陌生人做了| 13小男生gay自慰脱裤子|