1. 程式人生 > >Django之web應用、http協議和django簡介

Django之web應用、http協議和django簡介

  等了好久終於等到今天,盼了好久終於把夢實現,啦啦啦.....學習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就可以訪問了。