#什么是前端: 任何与用户直接打交道的操做界面都是前端css
#什么是后端: 幕后操做者 不直接和用户打交道html
超文本传输协议
规定了浏览器与服务端之间消息传输的数据格式前端
咱们直接用浏览器链接咱们的套接字服务端,若是你直接send二进制数据好比b'hello'过去,浏览器会报错,读不懂咱们发送的内容,咱们必须有一套公用协议,这就是http协议web
就好比不少语言均可以链接数据库,咱们就统一使用sql语句,无论谁来都要说sqlsql
只要经过浏览器访问服务端都要遵循这套协议,除非你开发本身客户端和服务端,好比qq等,二者都是本身的东西,爱咋滴咋滴数据库
import socket server = socket.socket() server.bind(('127.0.0.1',8080)) server.listen(5) while True: conn,addr = server.accept() data = conn.recv(1024) print(data) conn.send(b'HTTP/1.1 200 OK\r\n\r\n') with open('a.txt','rb') as f: res = f.read() conn.send(res) conn.close()
<h1>hello Girl!</h1> <a href="http://www.xiaohuar.com">click me</a> <img src="http://img5.imgtn.bdimg.com/it/u=641490458,234938865&fm=26&gp=0.jpg"/>
xxx.txt中写的是html语法编程
1.基于请求、响应
2.基于TCP/IP之上、做用于应用层的协议
3.无状态 (服务端没法保存用户的状态,一我的来一千次 我都记不住 还当你如初见)
4.无链接 (请求来一次我响应一次 以后立马断开链接 二者之间就再也不有任何关系了)
ps:针对无链接,有时候须要链接怎么办呢?websocket 至关因而HTTP协议的一个大的补丁,它支持长链接,好比企业的通信工具,聊天室等使用websocket
flask
请求首行 (标识HTTP协议版本,当前请求方式(get/post))
请求头 (一大堆k,v键值对)
*********************空白行,这才是重点****************
请求体 (携带的是一些敏感信息好比 密码,身份证号...)后端
响应首行 (标识HTTP协议版本,响应状态码)
响应头 (一大堆k,v键值对)
*********************空白行*********************************
响应体 (返回给浏览器页面的数据 一般响应体都是html页面)浏览器
用一串简单的数字来表示一些复杂的状态或者提示信息
1XX:服务端已经成功接收了你的数据正在处理 你能够继续提交额外的数据
2XX:服务端成功响应 你想要的数据(请求成功200)
3XX:重定向(当你在访问一个须要登陆以后才能访问的页面 你会发现窗口会自动调到登陆页面 301 302)
4XX:请求错误(请求资源不存在404,请求不合法不符合内部规定或权限不够403)
5XX:服务器内部错误,咱们不考虑(500)
1.get请求
朝服务端要资源(好比浏览器窗口输入www.baidu.com)
get请求也能够携带数据,跟在url的后面
ip:port?xxx=yyy&zzz=qqq
1.get可以携带的参数大小有限制,1kb左右很小
2.数据是直接可见,直接显示在地址栏,不安全,不能携带敏感隐私信息
2.post请求
朝服务端提交数据(好比用户登陆 提交用户名和密码),跟在请求体中
ps: URL:统一资源定位符(大白话 就是网址)
#Web服务的本质:
浏览器中敲入网址回车发送了几件事?
1.浏览器超服务端发送请求
2.服务端接收请求
3.服务端返回相应的响应 , 服务端把HTML文件内容发给浏览器
4.浏览器接收响应 根据特定的规则渲染页面展现给用户看
注释是代码之母
<!--单行注释-->
<!--
多行注释
多行注释
-->
通常状况下 html的注释都会按照下面的方式书写,注释开始和结束中间写某些东西,找的时候经过注释快速找到:
<!--导航条样式开始-->
******中间内容******
<!--导航条样式结束-->
最基本的HTML文档:
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>css样式优先级</title> </head> <body> </body> </html>
注意:对于中文网页须要使用 <meta charset="utf-8"> 声明编码,不然会出现乱码。有些浏览器会设置 GBK 为默认编码,则你须要设置为 <meta charset="gbk">
第一种分类:单标签 和 双标签
1.双标签(h1~h6 a p div span table ul ol dl)
2.单标签(自闭和标签 <br/>、<hr/>、<img src="1.jpg" /> <input/>)
第二种分类: 块级标签 和 行内标签
1.块儿级标签(独占浏览器一行) div p h等
#块儿级标签能够修改长宽,改一个另外一个等比改变
#块儿级标签内部能够嵌套任意的块级标签和行内标签,可是p虽为块级却只能嵌套行内标签,连本身这个块都不能嵌套
2.行内标签(自身文本多大就占多大) span b s i u等
id和class用的比较多,但都不是必备的 id值,该值就相似于人的身份证号,同一个html文件中id 应该保证惟一 class值,该值就相似于面向对象里面的继承(多个class由空格隔开) style(不是必备),支持在标签内直接写css代码,属于行内样式,优先级最高,但不推荐使用
补充:任何标签都支持自定义属性 <a href="#" username="jason" password="123">...点我...</a>
标签 | 意义 |
---|---|
<title></title> | 定义网页标题 |
<style></style> | 定义内部样式表 |
<script></script> | 定义JS代码或引入外部JS文件 |
<link/> | 引入外部样式表文件或网站图标 |
<meta/> | 定义网页原信息 |
#引入js
#head引入外部css样式文件
Meta标签介绍:
meta标签的组成:meta标签共有两个属性,它们分别是http-equiv属性和name 属性,不一样的属性又有不一样的参数值,这些不一样的参数值就实现了不一样的网页功能。
#http-equiv属性:至关于http的文件头做用,它能够向浏览器传回一些有用的信息,以帮助正确地显示网页内容,与之对应的属性值为content,content中的内容其实就是各个参数的变量值。
<!--指定文档的编码类型(须要知道)--> <meta http-equiv="content-Type" charset=UTF8"> <!--2秒后跳转到对应的网址,注意引号(了解)--> <meta http-equiv="refresh" content="2;URL=https://www.oldboyedu.com"> <!--告诉IE以最高级模式渲染文档(了解)--> <meta http-equiv="x-ua-compatible" content="IE=edge">
name属性: 主要用于描述网页,与之对应的属性值为content
keywords后的content是搜索关键字,只要你搜这些字都能找到该网页
description后的content是你搜索出来网站后网页上对该网站的描述
<meta name="keywords" content="淘宝,淘宝网,淘抢购,购物网"> <meta name="description" content="淘宝网是一个大型购物网站...">
<b>加粗</b> <i>斜体</i> <u>下划线</u> <s>删除</s> <p>段落标签</p> 段落 <h1>标题1</h1> 1-6级标题 ... <h6>标题6</h6> <br> 换行
<hr> 水平线
内容 | 对应代码 |
---|---|
空格 | |
> | > |
< | < |
& | & |
¥ | ¥ |
版权 | © |
注册 | ® |
div标签用来定义一个块级元素,并没有实际的意义。主要经过CSS样式为其赋予不一样的表现。
span标签用来定义内联(行内)元素,并没有实际的意义。主要经过CSS样式为其赋予不一样的表现。
这两个元素是专门为定义CSS样式而生的。
超连接标签
所谓的超连接是指从一个网页指向一个目标的链接关系,这个目标能够是另外一个网页,也能够是相同网页上的不一样位置,还能够是一个图片,一个电子邮件地址,一个文件,甚至是一个应用程序。
什么是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.xiaohuar.com" target="_blank" >点我点我</a>
href: 指定目标网页地址,点击后会跳转该url,该地址能够有几种类型:
target:
锚点功能:href 还能够写另外一个a标签的id值,点击就会跳到id值所对应的的a标签 <a id="top">顶部</a> <a href="#top">点击回到顶部</a>
<img src="图片路径" title="鼠标悬浮在图片上时显示" alt="提示信息(当图片加载不出来时会显示)" width="" height="当只指定一个时,会自动缩放"/> src 存放的是图片的路径 1.该路径能够是本地的,也能够是网上的 2.也能够放url(会自动请求该url获取相应数据) 3.也能够直接放图片的二进制数据,会自动转换成图片
ul li
、有序列表 ol li
、标题列表 dl dt dd
<ul type="选一个"> <li>第一项</li> <li>第二项</li> </ul>
type属性:
<ol type="1" start="2"> <li>第一项</li> <li>第二项</li> </ol>
type属性:
<dl> <dt>标题1</dt> <dd>内容1</dd>
<dt>标题2</dt> <dd>内容1</dd> <dd>内容2</dd> </dl>
table
thead
tr
th
tbody
td
tfoot
表格是一个二维数据空间,一个表格由若干行组成,一个行又有若干单元格组成,单元格里能够包含文字、列表、图案、表单、数字符号、预置文本和其它的表格等内容。
表格最重要的目的是显示表格类数据。表格类数据是指最适合组织为表格格式(即按行和列组织)的数据。
表格的基本结构:
<table> <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> <tfoot>结尾</tfoot>
</table>
tr 表示一行
th 和 td 都是文本,建议在 thead内用带加粗效果的th,在 tbody内用td
rowspan="2" 合并两行成一行 colspan="2" 合并两列成一列 使用合并时要把被合并的那行删掉,否则会挤出来
border="1" 表格边框
cellpadding="10" 单元格内间距(td内容和边框之间的距离)
cellspacing="10" 单元格外边距(不一样td之间的距离)
属性:
功能:
表单用于向服务器传输数据,从而实现用户与Web服务器的交互
表单可以包含input系列标签,好比文本字段、复选框、单选框、提交按钮等等。
表单还能够包含textarea、select、fieldset和 label标签。
属性 | 描述 |
---|---|
accept-charset | 规定在被提交表单中使用的字符集(默认:页面字符集)。 |
action ****** | 规定向何处提交表单的地址(URL)(提交页面)。 |
autocomplete | 规定浏览器应该自动完成表单(默认:开启)。 |
enctype ****** | 规定被提交数据的编码(默认:url-encoded)提交文件要改为formdata |
method ****** | 规定在提交表单时所用的 HTTP 方法(默认:get) |
name | 规定识别表单的名称(对于 DOM 使用:document.forms.name)。 |
novalidate | 规定浏览器不验证表单。 |
target | 规定 action 属性中地址的目标(默认:_self)。 |
注册实例为例: <form action="这里填数据提交的目的地"> <label for="username">username<input type="text" id="username"/></label> <label for="password">password</label> <input type="password" id="password"/> </form> 1.action 控制数据提交的目的地 不写的状况下,默认提交到当前页面所在的路径 *** 写全路径(https://www.baidu.com),将数据提交给对应路径 路径后缀(/index/会自动补全你本网站的ip和port *****
正常状况下必须点击小圆圈才能选择,
为“男”和“女”文字都添加上“label”标签,标签属性“for”的属性值分别为对应id即“male”和“female”,这时用户点击“男”和“女”文字时也会选中对应的选 项,提升了用户体验。
除了单选框以外,多选框、文本框等标签也一样能够用label标签选中:
#两种使用方式
<input> 元素会根据不一样的 type 属性,变化为多种形态。
type属性值 | 表现形式 | 对应代码 |
---|---|---|
text | 单行输入文本 | <input type=text" /> |
password | 密码输入框 | <input type="password" /> |
date | 日期输入框 | <input type="date" /> |
checkbox | 复选框 | <input type="checkbox" checked="checked" /> |
radio | 单选框 | <input type="radio" /> |
submit | 提交按钮 | <input type="submit" value="提交" /> |
reset | 重置按钮 | <input type="reset" value="重置" /> |
button | 普通按钮 | <input type="button" value="普通按钮" /> |
hidden | 隐藏输入框 | <input type="hidden" /> |
file | 文本选择框 | <input type="file" /> |
input标签 就相似因而前端变形金刚
type:
text:普通文本
password:密文 不展现明文
date:日期
submit:触发提交动做
button:普通按钮 没有实际意义 可是能够经过js绑定事件实现自定义动做
reset:清空重置用户填写的表单信息
radio:单选 能够经过checked控制默认选择(当属性值和属性名相同的状况下 能够简写 checked 或 checked="checked")
checkbox:多选 同上 能够设置默认值
file:获取用户上传的文件
form表单上传文件须要修改两个参数的值:
1.将method由默认的get改成post
2.将enctype编码格式由默认的urlencoded改成formdata

<form action="" method="post">
<select name="city" id="city">
<option value="1">北京</option>
<option selected="selected" value="2">上海</option>
<option value="3">广州</option>
<option value="4">深圳</option>
</select>
</form>
属性说明:
#多选和分组选择
<textarea name="memo" id="memo" cols="30" rows="10"> 我的简介: </textarea>
属性说明:
form表单中 要想触发提交动做
只有两种状况能够
1.input标签type指定成submit
2.直接写button标签 <button>提交</button>
disable 禁用,只能看(如:修改密码时用展现用户名,可是不能修改,只能看)
readonly 只读(记disable就行了)
输入input等关键字后tab能够一键补全,这是emmet插件的做用
Flask 插件安装
pip3 install Flask
from flask import Flask, request app = Flask(__name__) @app.route('/index/', methods=['GET', 'POST']) # 装饰的函数就可以接收这两种请求 def index(): print(request.form) # 获取前端form表单提交过来的数据 return '收到了' app.run() # Flask默认端口 5000
写好上述代码后,右键运行
在html 表单的action 属性
中输入 127.0.0.1:5000/index
给form表单的标签加上 name value后
要指定 enctype="multipart/form-data"
来接收文件