等了好久終於等到今天,盼了好久終於把夢實現,啦啦啦.....學習python兩個多月了,終於等到python的高潮,老師說要是把Django學會了,python的web開發就差不多了,也相當於迎來了python學習之路最重要一環節,也是框架中比較難的,所以也是迎來了最大難點,好高興哦,可以上課開飛機 ...
等了好久終於等到今天,盼了好久終於把夢實現,啦啦啦.....學習python兩個多月了,終於等到python的高潮,老師說要是把Django學會了,python的web開發就差不多了,也相當於迎來了python學習之路最重要一環節,也是框架中比較難的,所以也是迎來了最大難點,好高興哦,可以上課開飛機了,太棒了!!!!
一、web應用
web應用程式是一種可以通過web訪問的應用程式,程式的最大好處是用戶很容易訪問應用程式,用戶只需要有瀏覽器既可,不需要安裝其他軟體。應用程式有兩種模式C/S、B/S。C/S是客戶端與伺服器端,這類程式一般能獨立運行,而B/S就是瀏覽器端和伺服器端應用程式,這類應用程式一般要藉助谷歌、火狐等瀏覽器來運行。web應用程式一般用B/S模式。在網路編程的意義下,瀏覽器是一個socket客戶端,伺服器是一個socket服務端。
import socket def handle_request(client): request_data = client.recv(1024) print("request_data: ",request_data) client.send("HTTP/1.1 200 OK\r\nstatus: 200\r\nContent-Type:text/html\r\n\r\n".encode("utf8")) client.send("<h1>Hello, luffycity!</h1><img src=''>".encode("utf8")) def main(): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.bind(('localhost',8812)) sock.listen(5) while True: print("the server is waiting for client-connection....") connection, address = sock.accept() handle_request(connection) connection.close() if __name__ == '__main__': main()
二、http協議
1,http協議簡介
http協議是Hyper Text Transfer Protocol(超文本傳輸協議)的縮寫,是用於萬維網(www:world wide web)伺服器與本地瀏覽器之間傳輸超文本的傳輸協議。瀏覽器作為http客戶端通過URL向http伺服器端即web伺服器發送請求。web伺服器根據接收到的請求,向客戶端發送響應信息。
http協議特性:
1,基於tcp/IP:http協議是基於TCP/IP協議之上的應用協議
2,基於請求-響應模式:http協議規定,請求從客戶端發出,最後伺服器端響應請求並返回,換句話說,肯定是先從客戶端開始建立通信的,伺服器端在沒有收到請求之前是不會發送響應的。
3,無狀態保存:http是一種不保存狀態,即無狀態保存協議。http協議自身部隊請求和響應之間的通信狀態進行保存。也就是說在http這個級別,協議對於發送過的請求或響應都不做持久化處理。使用http協議,每當有新的請求時就會發送新的響應,協議本身並不保存之前的一切請求或響應報文信息。這是為了更快的處理大量事務,確保協議的可伸縮性。隨著web的不斷發展,因無狀態而導致業務處理很棘手的情況多了,比如用戶登錄到一家網站,即使他跳轉到網站的其他頁面,也需要能繼續保存登錄狀態。http/1.1雖然是無狀態協議,單位了實現繼續保存狀態,於是引進Cookie技術,有了Cookie在使用http協議通信,就可以管理轉態了。
4,無連接:無連接的含義是限制每次連接只處理一個請求。伺服器處理完客戶的請求,並收到客戶的應答後,即斷開連接,採用這種方式可以節省傳輸時間。
2,http請求協議與響應協議
http協議包含由瀏覽器發送數據到伺服器需要遵循的請求協議和伺服器發送到瀏覽器需要遵循的響應協議。用於http協議交互的信被稱為http報文,客戶端發送的http報文叫做請求報文,伺服器發送的http報文叫響應報文
2.1 請求協議
請求格式
請求方式:get與post請求
get方式提交的數據會放在url之後,以?分割url和傳輸數據,參數之間以&相連;post方式提交的數據會放在http包的請求體中,請求體和請求首部欄位中間用一行空白相連。
get提交的數據大小有限制(因為瀏覽器對url的長度有限制),而post方法提交的數據沒有限制
2.2 響應協議
響應格式
響應狀態碼:是客戶端向伺服器發送請求時,返回的請求結果,藉助狀態碼,用戶可以知道伺服器端是正常處理了請求,還是出現了錯誤。狀態碼如200 OK,以三位數和原因組成。數字第一位指定響應結果,後兩位沒有含義。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="" method="post"> 用戶名 <input type="text" name="user"> 密碼 <input type="password" name="pwd"> <input type="submit"> </form> </body> </html>login.html
sock=socket.socket() sock.bind(("127.0.0.1",8808)) sock.listen(5) while 1: print("server waiting.....") conn,addr=sock.accept() data=conn.recv(1024) print("data",data) # 讀取html文件 with open("login.html","rb") as f: data=f.read() conn.send((b"HTTP/1.1 200 OK\r\n\r\n%s"%data)) conn.close()View Code
三、Django簡介
1,MVC與MTV模型
1.1 MVC
web伺服器開發領域最著名的就是MVC模型,所謂MVC就是把web應用分為模型(M)、控制器(C)和視圖(V)三層,他們之間以一種插件式的、松耦合的方式方式連接在一起,模型負責業務對象與資料庫的映射(ORM),視圖負責與用戶的交互,控制器接收用戶的輸入調用模型與視圖完成用戶的請求,示意圖:
1.2 MTV
Django的MTV模型本質上和MVC是一樣的,也是為了各組件間的松耦合關係,只是定義上有些不同。M代表模型(model):負責業務對象與資料庫之間的關係映射(ORM),T代表模板(Template):負責如何把頁面展示給用戶(HTML),V代表視圖(view):負責業務邏輯,併在適當時候調用到model和Template。除了這三個,還有一個url分發器,它的作用是將一個個url的頁面請求分發給不同的view處理,在調用相應的model和Template。響應模式如下:
2,Django的下載和基本命令
在cmd中輸入指令
pip install django #下載django
django-admin.py startproject 項目名 #創建一個新的項目
當前目錄下會生成一個文件夾,文件下目錄如下:
manage.py #Djangox項目裡面的工具,通過它可以調用django shell和資料庫等
settings.py #包含了項目的預設設置,包括資料庫信息、調試標誌以及其他一些工作的變數
urls.py #包含把url模式映射到應用程式
在項目下創建一個應用
python manage.py startapp 應用名 #創建一個應用
創建的應用會生成一個文件夾,文件夾目錄如下:
python manage.py runserver #啟動django項目,不寫埠和ip會預設127.0.0.1:8080
此時,我們就可以在瀏覽器地址輸入127.0.0.1:8080,就可以訪問,但此時頁面只有原有的東西
3,在python中基於Django實現一個簡單web開發
我們在pycharm中新建一個Django項目,新建一個APP應用。
新建後會得到如下一個目錄
在views.py文件中寫上如下代碼:
from django.shortcuts import render from django.shortcuts import HttpResponse def index(request): # return HttpResponse('hello world') return render(request,'tab切換.html')
在urls.py文件中寫上如下代碼:
from django.contrib import admin from django.urls import path from app01 import views urlpatterns = [ path('admin/', admin.site.urls), path('index/', views.index),
在Template文件夾中新建一個HTML文件,寫上如下代碼:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> .c1{ width: 100%; background-color: grey; color: blue; font-size: 30px; } .c2{ width: 1000px; margin: 0 auto; } .c2 span{ margin-left: 175px; } .c3{ border: 1px solid black; height: 500px; margin: 0 auto; width: 1000px; } .hide{ display: none; } .cc{ background-color: black; } </style> </head> <body> <div class="c1"> <div class="c2"> <span class="c4" id="i1">欄目一</span> <span class="c4" id="i2">欄目二</span> <span class="c4" id="i3">欄目三</span> </div> </div> <div> <div class="c3"> <span class="hide i1">生命來來往往,來日並不方長。時光如水流逝,歲月無聲催老。每一天,都過得忙忙碌碌,每一天,都有不同的精彩。春花秋月,夏雨冬雪,走過了一程又一程,驀然迴首,便已是上有老下有小的年紀。曾經年少,不解父母辛勞,一路成長,一路依靠。所謂養兒方知父母恩,為人父母之後,自己如何操勞,如何不易,唯有經歷過後,才知其中艱辛。這世上,從來就沒有什麼感同身受,唯有親身經歷,才能深解其味。人生,就是一場輪迴,年輕的時候,誰不為子女奔波勞累,待到子女羽翼已豐,不再需要護佑之時,自己已是夕陽暮景。而那些曾經的子女,也會成為新的父母,一如自己的父母那般,勤勤懇懇,為自己的子女操勞負累,待到子女再次長成,自己便也老去。誰都有年邁之時。幼時,父母耐心教導,周全照料,待到父母暮年,我們是否也能如同曾經他們對待我們那般,不嫌不怪,周全仔細,用心侍奉。人生,總是吃過生活的苦,才知道幸福有多甜蜜;走過太多彎路,才明白自己要怎麼活。衡量幸福的標準,不是你得到了多少,而是要看你當下擁有多少,並且,要懂得珍視。在這個世界上,父母,是唯一盡心付出卻不求回報的人,也是最不願意給我們添麻煩的人。都說,做父母是有有效期的,其實,做兒女又何嘗不是?子欲養而親尚待,絕對是上天給予的最大恩賜。趁父母還年輕,趁父母還健在,多陪陪他們吧。不要整天只知道在朋友圈說什麼父母在,人生尚有來處,父母去,人生只剩歸途。多拿出些實際行動,去做,去實現。</span> <span class="hide i2">心像是個口袋,什麼都不裝的叫心靈,裝一點的叫心眼,裝多了的的叫心計,裝更多的叫心機,裝得太多了最後那些負累就只能被當作心事了。人活在世往往過於在意近在咫尺的功名利祿,我們的生活是否如與朋友說起時一般絢爛奪目,現實生活中亦有很多人深陷進沒有結果的愛情里,明知是錯的,還要迂迴前進。那些口口聲聲說著為了生活的衣食無憂、為了孩子不得不繼續維持的婚姻。很多人拿不起又放不下,任由空白的生活在自己的眼中周而複始、慢慢的這種負累侵蝕的我們身心不堪重負。試著放下吧,放下你的疲憊、放下那些沒有結果的執念、清醒時看到的你和他的未來若是並不理想,不如勸自己趁早放下,長痛不如短痛。再試著看開些,有錢就會擁有快樂麽?就像你耗盡心力換得了工作場上的升職機會,而就在你即將上任時被查出了重症,錢能換回健康麽?再多的錢能換回你的生命,換回勃勃生機的青春麽?錢固然重要,可是與生命、與親情、愛情比起來,錢真的沒有那麼重要。有形的財富無法與無價的情感、生命相提並論,何來取捨一說呢。人一定要想清三個問題,第一你有什麼,第二你要什麼,第三你能放棄什麼。對於多數人而言:有什麼,我們往往很輕易的就評價出自己的現狀;那要什麼,大多數人內心也有明確的想法;那麼問題來了,現在你告訴我你能放棄什麼,幾乎沒有人可以做到不放棄就輕易獲得了全部你想要的東西。人生不會每一件事都會讓自己稱心如意,常言道:人為財死,鳥為食亡。但有多少人為了事業有成,最後倒在了工作崗位上,那些口耳相傳的過勞案例並非偶然意外、就像疾病的發展也是有一個循序漸進的過程。外在的過勞加上心裡的過度憂思,外因內因從不分離。那些遠赴千裡外的地方工作的子女,其家中病重老母為不讓遠方的兒過於掂念,不忍心在孩子耳邊傳遞生病訊息,彌留之際也未能見上最後一面。我並不贊成那些拋家舍業的一顆心思完全放在工作上的做法,工作一時的,即便離開這,你仍有再次獲得的機會。而家庭、健康卻要陪伴你很久,且一旦失去就是永遠。或許你是為財而死,但是不值得。生活中很多人喜歡就一件事左右搖擺,舉棋不定。輕易落子怕輸了,一子不落怕錯過。於是他們一直糾結於細微得不值得一提的小事,讓自己始終活在緊張的泥潭不能自拔。在自己短暫的一生中,謹小慎微,防微杜漸,也許別人的一句話,一個眼神,一個表情,都會不斷揣摩,別人隨口一說的話卻始終放在心裡耿耿於懷,凡事有一點端倪便以偏概全,杞人憂天。所以這些人總是活得很累,舒心二字與他們完全絕緣。其實人生有一種心態叫放下,。不必凡事都爭個明白,我們生活的這個社會本就很複雜,然而很多人把這個本來就複雜的社會弄得更加複雜,複雜的無章可循。貪婪的人容易受到打擊。欲望越少,生活越幸福。</span> <span class="hide i3">“感恩之心,幻化成蝶”雅而不失原本滋色,其實這八個字傳遞的是一種高度,人生在世因為懂得感恩,所以不再抱怨生活艱辛,因為懂得感恩,所以不去計較過多的利益得失,因為懂得感恩,所以不再在乎快樂或是悲傷,傷或不傷的這段過程本身就是一種幸福。曾看過這樣一段話,其出自哈佛大學圖書館館訓:“你所浪費的今天,是昨天死去的人奢望的明天。你所厭惡的現在,是未來的你回不去的曾經。”自己就算再不堪,你還擁有大把的生命去揮霍,你還可以盡情享受生活,張開雙手擁抱明早初生的太陽。感恩生命,活著就是最寶貴的擁有。感恩生活說到感恩,首先對自己說上一句謝謝,謝謝你始終默默堅守,謝謝你無論越過多少溝壑,通往前方的路是曲折是坎坷你都從未放棄行走。英國作家薩克雷說:“生活就是一面鏡子,你笑,它也笑;你哭,它也哭。”“人有悲歡離合,月有陰晴圓缺。”就如同這詩句一般,人生在世,不如意事十有八九。難過、失落、彷徨註定貫穿在我們的生命線中的,若你過度在意、糾結那你就會始終陷入困頓的沼澤再無法自拔。沒有一帆風順的人生,有的只是內心的波瀾不驚,從容不迫。如你抱怨,那你看到的世界處處不順心意。你若感恩,很多事便化作是過眼煙雲。內心保持一份安寧是我們對生命最好的感謝。生活中的幸事教會你微笑、自信。順境是心情,逆境是心態,更是眼界和格局。生活中的各種坎坷教會了你成長。以積極心態勇敢的面對生活中那些困頓的人更堅強、更懂得挑戰和突破自我,從而實現生命的價值,讓生命不虛度。“塞翁失馬,焉知非福”、“禍兮,福之所倚,福兮,禍之所伏。”不執著問題表象,保持頭腦的清醒,靜看人生,那麼得失也亦不必在短時間內拍下定論,問題中或許還潛藏著陷阱和轉機。 古詩中說:“山窮水盡疑無路,柳暗花明又一村。”日常生活當中,許多人經常以個人的利益得失來衡量事情的好壞,有些人每天都為蠅頭小利或喜或憂。然由於人們看到的只是事情表象,得到未必是福,失去也不一定是禍。“物極必反,否極泰來。”沒有挫折就不會有智慧,沒有付出就難以有收穫。一失敗就是一次假期,樂觀豁達之人都懂得享受假期而不會怨天尤人,反而會利用這種機會休養好自己的身心,冷靜的思考人生、總結經驗,在假期過後重踏人生旅途時就會出現新的轉機。即使是遇到了最壞的狀況時,也應該看到人生處處隱藏著令人意想不到的機會,坦然面對人生中的挫折,百折不撓,就必能走向光明的彼岸。</span> </div> </div> <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script> <script> $('.c4').click(function () { var ss=`.${this.id}`; $(ss).removeClass('hide'); $(ss).siblings().addClass('hide'); $(this).addClass('cc'); $(this).siblings().removeClass('cc'); }) </script> </body> </html>View Code
這樣運行項目,在瀏覽器中輸入127.0.0.1:8080/index就可以訪問了。