import socket sk = socket.socket() sk.bind(("127.0.0.1", 8080)) sk.listen(5) while True: conn, addr = sk.accept() data = conn.recv(8096) conn.send(b"HTTP/1.1 200 OK\r\n\r\n") conn.send(b"<h1>Hello world!</h1>") conn.close()
瀏覽器發請求 --> HTTP協議 --> 服務端接收請求 --> 服務端返回響應 --> 服務端把HTML文件內容發給瀏覽器 --> 瀏覽器渲染頁面css
HTML是一種標記語言(markup language),它不是一種編程語言。html
HTML使用標籤來描述網頁。不像python編程語言同樣,有邏輯什麼的,這個標記語言是沒有邏輯的python
最基本的HTML文檔:web
<!DOCTYPE html> <html lang="zh-CN"> #這個lang表示語言,zh-CN是中文的意思,就是說,你整個文檔的內容以中文爲主,若是以英文爲主,就寫成lang='en' <head> <meta charset="UTF-8"> <title>css樣式優先級</title> </head> <body> </body> </html>
注意:對於中文網頁須要使用 <meta charset="utf-8"> 聲明編碼,不然會出現亂碼。有些瀏覽器會設置 GBK 爲默認編碼,則你須要設置爲 <meta charset="gbk">。chrome
pycharm中建立一個html文件,你就會發現,整個結構都給你直接生成好了,由於無論什麼瀏覽器,這個文檔結構都是這樣的。django
經過pycharm能夠設置整個文檔:編程
html文件能夠在pycharm中的這個位置就能打開,你會發現地址欄是種file:///這也是一個協議,瀏覽器打開本身本地文件的協議。後端
標籤的語法:瀏覽器
有些屬性是沒有特殊的效果的,而有些屬性是有效果的,好比 <h1 s='name'>xxx<h1/>,其中s='name'是沒什麼效果的,而<a src='http://www.baidu.com'>xxx</a>,你會看到一些效果,能夠點擊,有下劃線,有顏色。安全
幾個很重要的屬性:
<!--註釋內容--> #找到一行內容ctrl+/就能註釋,註釋的內容不會在網頁上顯示出來
<!DOCTYPE> 聲明必須是 HTML 文檔的第一行,位於 <html> 標籤以前。
<!DOCTYPE> 聲明不是 HTML 標籤;它是指示 web 瀏覽器關於頁面使用哪一個 HTML 版本進行編寫的指令。
標籤 | 意義 |
---|---|
<title></title> | 定義網頁標題 |
<style></style> | 定義內部樣式表 |
<script></script> | 定義JS代碼或引入外部JS文件 |
<link/> | 引入外部樣式表文件 |
<meta/> | 定義網頁原信息 |
Meta標籤介紹: #做爲了解內容
meta標籤的組成:meta標籤共有兩個屬性,它們分別是http-equiv屬性和name 屬性,不一樣的屬性又有不一樣的參數值,這些不一樣的參數值就實現了不一樣的網頁功能。
1.http-equiv屬性:至關於http的文件頭做用,它能夠向瀏覽器傳回一些有用的信息,以幫助正確地顯示網頁內容,與之對應的屬性值爲content,content中的內容其實就是各個參數的變量值。
<!--2秒後跳轉到對應的網址,注意引號--> <meta http-equiv="refresh" content="2;URL=https://www.oldboyedu.com"> #若是把URL和後面的內容去掉,就是2秒鐘刷新一次,這些內容瞭解一下就行 <!--指定文檔的編碼類型--> <meta http-equiv="content-Type" charset=UTF8"> <!--告訴IE以最高級模式渲染文檔--> <meta http-equiv="x-ua-compatible" content="IE=edge"> #edge是微軟的一個全新的瀏覽器,其實就是告訴IE瀏覽器,你按照最高標準來渲染個人頁面,瞭解一下就能夠啦
2.name屬性: 主要用於描述網頁,與之對應的屬性值爲content,content中的內容主要是便於搜索引擎機器人查找信息和分類信息用的。
<meta name="keywords" content="meta總結,html meta,meta屬性,meta跳轉"> #關鍵字,也就是別人是能夠經過這些關鍵字搜索到個人這個文章的,搜索引擎就是可以這個content內容來幫別人搜索到你的這個文檔的 #SEO就是作這個的,就是怎麼讓大家公司的網站在別人搜索的時候可以靠前顯示,不算那個花錢的,百度是充值的,你衝個20w,別人可能一天就給你點擊完了,特別的貴 <meta name="description" content="xxxxxpythonxxx學習"> #是對這個文檔的描述,在百度一些內容的頁面上,f12打開看看
下面這個紅框裏面就是描述信息:
瀏覽器內核:
瀏覽器 -- 內核
IE -- trident
chrome --- blink
火狐 --- gecko
Safari --- webkit
PS:「瀏覽器內核」也就是瀏覽器所採用的「渲染引擎」,渲染引擎決定了瀏覽器如何顯示網頁的內容以及頁面的格式信息。渲染引擎是兼容性問題出現的根本緣由。
不加標籤的純文字也是能夠在body中寫的 <b>加粗</b> <i>斜體</i> <u>下劃線</u> <s>刪除</s> <p>段落標籤</p> #獨佔一個段落 <h1>標題1</h1> <h2>標題2</h2> <h3>標題3</h3> <h4>標題4</h4> <h5>標題5</h5> <h6>標題6</h6> <!--換行--> <br> <!--水平線--><hr> #就是單獨個一個水平線 每次加上一些內容,別忘了刷新一下頁面,才能看到新添加的效果或者內容,其實上面這些標籤不多用
內容 | 對應代碼 |
---|---|
空格(html中默認是不顯示空格的,也就是說經過空格鍵加了空格也沒有多個空格的效果,加多少個都是顯示一個空格效果,須要這些特殊字符才能顯示出空格效果) | |
> | > |
< | < |
& | & |
¥ | ¥ |
版權標識(寫公司網站的時候會用到) | © |
註冊(一個圓圈裏面有個R) | ® |
這兩個標籤是沒有特別的樣式的。<div>xxxx</div>,可是這是兩個標籤最大的特色,能夠經過CSS來控制,就像我們畫畫同樣,在一個白紙上畫好,仍是在一個報紙上畫好啊,對不對。打開個網頁經過f12看一下,就發現多數都是div和span。
div標籤用來定義一個塊級元素,並沒有實際的意義。主要經過CSS樣式爲其賦予不一樣的表現。
span標籤用來定義內聯(行內)元素,並沒有實際的意義。主要經過CSS樣式爲其賦予不一樣的表現。
塊級元素與行內元素的區別:
所謂塊元素,是以另起一行開始渲染的元素,行內元素則不需另起一行。若是單獨在網頁中插入這兩個元素,不會對頁面產生任何的影響。
這兩個元素是專門爲定義CSS樣式而生的。
剛纔學的標籤:
塊級標籤:p、h1--h六、hr、div
內聯標籤:b、i、u、s
注意:
關於標籤嵌套:一般塊級元素能夠包含內聯元素或某些塊級元素,但內聯元素不能包含塊級元素,它只能包含其它內聯元素。div是能夠包含div的
p標籤比較特殊,不能包含塊級標籤,p標籤也不能包含p標籤。能夠試一下p標籤套p標籤,f12你會發現三個p標籤
<img src="圖片的路徑" alt="圖片未加載成功時的提示" title="鼠標懸浮時提示信息" width="寬" height="高(寬高兩個屬性只用一個會自動等比縮放)">
src的路徑又分爲兩種:網上的一個圖片路徑和本地的一個圖片路徑
超連接標籤
所謂的超連接是指從一個網頁指向一個目標的鏈接關係,這個目標能夠是另外一個網頁,也能夠是相同網頁上的不一樣位置,還能夠是一個圖片,一個電子郵件地址,一個文件,甚至是一個應用程序。
什麼是URL? URL是統一資源定位器(Uniform Resource Locator)的縮寫,也被稱爲網頁地址,是因特網上標準的資源的地址。 URL舉例 http://www.sohu.com/stu/intro.html http://222.172.123.33/stu/intro.html URL地址由4部分組成 第1部分:爲協議:http://、ftp://等 第2部分:爲站點地址:能夠是域名或IP地址 第3部分:爲頁面在站點中的目錄:stu 第4部分:爲頁面名稱,例如 index.html 各部分之間用「/」符號隔開。
<a href="http://www.oldboyedu.com" target="_blank" >點我</a>
href屬性指定目標網頁地址。該地址能夠有幾種類型:
target:
1.無序列表
<ul type="disc"> <li>第一項</li> <li>第二項</li> </ul>
type屬性:
2.有序列表
<ol type="1" start="2"> <li>第一項</li> <li>第二項</li> </ol>
type屬性: start是從數字幾開始
3.標題列表(就像大綱同樣,有一個層級效果)
<dl> <dt>標題1</dt> <dd>內容1</dd> <dt>標題2</dt> <dd>內容1</dd> <dd>內容2</dd> </dl>
表格是一個二維數據空間,一個表格由若干行組成,一個行又有若干單元格組成,單元格里能夠包含文字、列表、圖案、表單、數字符號、預置文本和其它的表格等內容。
表格最重要的目的是顯示錶格類數據。表格類數據是指最適合組織爲表格格式(即按行和列組織)的數據。
表格的基本結構:
<table border='1'> <thead> #標題部分 <tr> #一行 <th>序號</th> #一個單元格 <th>姓名</th> <th>愛好</th> </tr> </thead> <tbody> #內容部分 <tr> #一行 <td>1</td> #一個單元格 <td>Egon</td> <td>槓娘</td> </tr> <tr> <td>2</td> <td>Yuan</td> <td>日天</td> </tr> </tbody> </table>
屬性:
效果
上面這幾個屬性基本上用不到。
其實標籤又能夠分爲兩類:一、展現給用戶看的 二、獲取用戶輸入內容的標籤,剛纔前面的這些標籤都是展現內容用的,下面要學的標籤是捕獲用戶輸入的標籤。基本上HTML中經常使用的就這些標籤
功能:
表單用於向服務器傳輸數據,從而實現用戶與Web服務器的交互
表單可以包含input系列標籤,好比文本字段、複選框、單選框、提交按鈕等等。
表單還能夠包含textarea、select、fieldset和 label標籤。
表單屬性
屬性 | 描述 |
---|---|
accept-charset | 規定在被提交表單中使用的字符集(默認:頁面字符集)。 |
action | 規定向何處提交表單的地址(URL)(提交頁面)。 |
autocomplete | 規定瀏覽器應該自動完成表單(默認:開啓)。 |
enctype | 規定被提交數據的編碼(默認:url-encoded)。 |
method | 規定在提交表單時所用的 HTTP 方法(默認:GET)。 |
name | 規定識別表單的名稱(對於 DOM 使用:document.forms.name)。 |
novalidate | 規定瀏覽器不驗證表單。 |
target | 規定 action 屬性中地址的目標(默認:_self)。 |
表單元素
基本概念:
HTML表單是HTML元素中較爲複雜的部分,表單每每和腳本、動態頁面、數據處理等功能相結合,所以它是製做動態網站很重要的內容。
表單通常用來收集用戶的輸入信息
表單工做原理:
訪問者在瀏覽有表單的網頁時,可填寫必需的信息,而後按某個按鈕提交。這些信息經過Internet傳送到服務器上。
服務器上專門的程序對這些數據進行處理,若是有錯誤會返回錯誤信息,並要求糾正錯誤。當數據完整無誤後,服務器反饋一個輸入完成的信息。
點擊提交按鈕,input中type=submit的那個按鈕,而後就會將form表單中全部用戶輸入的內容或者選擇的內容({name屬性:值,})都發給服務端(以咱們本身寫的那個socket舉例,打印一下接收的內容),可是全部的輸入標籤必須有一個叫作name的屬性。
發現跳到這個頁面了:看url的內容,有了咱們輸入的內容,而且是給你組合起來的,name屬性值和你輸入的值組合到一塊兒了,經過&符號分隔,而且在路徑那裏加了個問號
打印一下socket接收的消息,你就發現已經接受到這些數據了
讓用戶選擇的,必須指定一個value值,要否則後端接收不到內容,用戶本身填寫的標籤,不須要指定value值
而後再點擊提交,後端打印一下接收的數據:
可是這樣並很差,由於url中顯示了你的信息,而且若是內容不少的話,你的地址欄不可以輸入那麼長的內容,爲何會默認拼接到url裏面呢,由於form表單默認是get請求提交內容,咱們能夠改成post,來看看:post會把全部你提交的信息封裝到一個消息體裏面,在瀏覽器上就看不到了,對於小白來講,看着安全一些。
點擊提交就跳到這個網址了:
在看後端打印的內容:
你會發現一個post請求:
把內容日後拉,就能看到我們提交的數據了
那麼你看,你的瀏覽器再你點擊提交的時候,獲取了你所輸入的內容,而後經過網絡提交給你的服務端代碼程序了。
而後咱們後端經過提交過來的數據,來作某些事情,該驗證的驗證,該保存的保存
因此記住form表單裏面有兩個屬性:action控制往哪裏提交數據、method控制用什麼方式提交。
還有一個文件input:由於咱們剛纔說,數據是經過組成一個字典發給後端的,可是文件怎麼作鍵值對啊,作不了,因此須要經過二進制流的形式一點一點的傳送給後端,就是這個multipart搞的事情,有個瞭解就好了,別糾結,到了django咱們在細說。
屬性:
效果
上面這幾個屬性基本上用不到。
其實標籤又能夠分爲兩類:一、展現給用戶看的 二、獲取用戶輸入內容的標籤,剛纔前面的這些標籤都是展現內容用的,下面要學的標籤是捕獲用戶輸入的標籤。基本上HTML中經常使用的就這些標籤
功能:
表單用於向服務器傳輸數據,從而實現用戶與Web服務器的交互
表單可以包含input系列標籤,好比文本字段、複選框、單選框、提交按鈕等等。
表單還能夠包含textarea、select、fieldset和 label標籤。
表單屬性
屬性 | 描述 |
---|---|
accept-charset | 規定在被提交表單中使用的字符集(默認:頁面字符集)。 |
action | 規定向何處提交表單的地址(URL)(提交頁面)。 |
autocomplete | 規定瀏覽器應該自動完成表單(默認:開啓)。 |
enctype | 規定被提交數據的編碼(默認:url-encoded)。 |
method | 規定在提交表單時所用的 HTTP 方法(默認:GET)。 |
name | 規定識別表單的名稱(對於 DOM 使用:document.forms.name)。 |
novalidate | 規定瀏覽器不驗證表單。 |
target | 規定 action 屬性中地址的目標(默認:_self)。 |
表單元素
基本概念:
HTML表單是HTML元素中較爲複雜的部分,表單每每和腳本、動態頁面、數據處理等功能相結合,所以它是製做動態網站很重要的內容。
表單通常用來收集用戶的輸入信息
表單工做原理:
訪問者在瀏覽有表單的網頁時,可填寫必需的信息,而後按某個按鈕提交。這些信息經過Internet傳送到服務器上。
服務器上專門的程序對這些數據進行處理,若是有錯誤會返回錯誤信息,並要求糾正錯誤。當數據完整無誤後,服務器反饋一個輸入完成的信息。
點擊提交按鈕,input中type=submit的那個按鈕,而後就會將form表單中全部用戶輸入的內容或者選擇的內容({name屬性:值,})都發給服務端(以咱們本身寫的那個socket舉例,打印一下接收的內容),可是全部的輸入標籤必須有一個叫作name的屬性。
發現跳到這個頁面了:看url的內容,有了咱們輸入的內容,而且是給你組合起來的,name屬性值和你輸入的值組合到一塊兒了,經過&符號分隔,而且在路徑那裏加了個問號
打印一下socket接收的消息,你就發現已經接受到這些數據了
讓用戶選擇的,必須指定一個value值,要否則後端接收不到內容,用戶本身填寫的標籤,不須要指定value值
而後再點擊提交,後端打印一下接收的數據:
可是這樣並很差,由於url中顯示了你的信息,而且若是內容不少的話,你的地址欄不可以輸入那麼長的內容,爲何會默認拼接到url裏面呢,由於form表單默認是get請求提交內容,咱們能夠改成post,來看看:post會把全部你提交的信息封裝到一個消息體裏面,在瀏覽器上就看不到了,對於小白來講,看着安全一些。
點擊提交就跳到這個網址了:
在看後端打印的內容:
你會發現一個post請求:
把內容日後拉,就能看到我們提交的數據了
那麼你看,你的瀏覽器再你點擊提交的時候,獲取了你所輸入的內容,而後經過網絡提交給你的服務端代碼程序了。
而後咱們後端經過提交過來的數據,來作某些事情,該驗證的驗證,該保存的保存
因此記住form表單裏面有兩個屬性:action控制往哪裏提交數據、method控制用什麼方式提交。
還有一個文件input:由於咱們剛纔說,數據是經過組成一個字典發給後端的,可是文件怎麼作鍵值對啊,作不了,因此須要經過二進制流的形式一點一點的傳送給後端,就是這個multipart搞的事情,有個瞭解就好了,別糾結,到了django咱們在細說。
注意:
form表單提交數據的時候,必須有個submit按鈕
下面這個django的示例,等我學django的時候再說吧:
注意:
form表單提交數據的時候,必須有個submit按鈕
下面這個django的示例,等我學django的時候再說吧:
from django.conf.urls import url from django.shortcuts import HttpResponse def upload(request): print("request.GET:", request.GET) print("request.POST:", request.POST) if request.FILES: filename = request.FILES["file"].name with open(filename, 'wb') as f: for chunk in request.FILES['file'].chunks(): f.write(chunk) return HttpResponse('上傳成功') return HttpResponse("收到了!") urlpatterns = [ url(r'^upload/', upload), ]
<input> 元素會根據不一樣的 type 屬性,變化爲多種形態。
type屬性值 | 表現形式 | 對應代碼 |
---|---|---|
text | 單行輸入文本 | <input type=text" /> |
password | 密碼輸入框(不顯示明文) | <input type="password" /> |
date | 日期輸入框 | <input type="date" /> |
checkbox | 複選框 | <input type="checkbox" checked="checked" name='x' /> |
radio | 單選框 | <input type="radio" name='x' /> |
submit | 提交按鈕 | <input type="submit" value="提交" /> #發送瀏覽器上輸入標籤中的內容,配合form表單使用,頁面會刷新 |
reset | 重置按鈕 | <input type="reset" value="重置" /> #頁面不會刷新,將全部輸入的內容清空 |
button | 普通按鈕 | <input type="button" value="普通按鈕" /> |
hidden | 隱藏輸入框 | <input type="hidden" /> |
file | 文本選擇框 | <input type="file" /> (等學了form表單以後再學這個) |
屬性說明:
<form action="" method="post"> <select name="city" id="city"> <option value="1">北京</option> <option selected="selected" value="2">上海</option> #默認選中,當屬性和值相同時,能夠簡寫一個selected就好了 <option value="3">廣州</option> <option value="4">深圳</option> </select> </form>
屬性說明:
定義:<label> 標籤爲 input 元素定義標註(標記)。若是不用這個label給input標籤一個標記,input會變黃,不影響使用,只是提示你,別忘了給用戶一些提示,也就是這個label標籤。
說明:
<form action=""> <label for="username">用戶名</label> #for和input的id屬性同樣,就關聯在一塊兒了 <input type="text" id="username" name="username"> </form>
<textarea name="memo" id="memo" cols="30" rows="10"> 默認內容 </textarea>
屬性說明: