前端之HTML初识

手写服务端,启用浏览器(客户端连接服务端)

server.py 文件 #服务端
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()
a.txt 文件 # 与server文件在同一个盘符
<h1>welcome to  web!</h1>

<a href="https://pro.jd.com">click me</a>
<img src="https://ss0.bdstatic.com/94oJfD_bAAcT8t7mm9GUKT-xh_/timg?image&quality=100&size=b4000_4000&sec=1567501575&di=657a542ad90db39e70cf56a98f3c510a&src=http://img1.cache.netease.com/catchpic/1/13/13FA5A6A2B6601644B841F2B482372A5.png"/>
<img src="https://ss3.baidu.com/-rVXeDTa2gU2

在浏览器窗口输入本机回环地址(127.0.0.1:8080)并回车会将a.txt中的代码对应的内容渲染到网页上

Web服务的本质:

浏览器中敲入网址回车发送了几件事?
1.浏览器朝服务端发送请求
2.服务端接收请求
3.服务端返回相应的响应
4.浏览器接收响应 根据特定的规则渲染页面展示给用户看

HTTP协议(HyperText Transfer Protocol)

超文本传输协议
规定了浏览器与服务端之间消息传输的数据格式

四大特性:
1.基于请求响应
2.基于TCP/IP之上的作用于应用层的协议
3.无状态(服务端无法保存用户的状态,)
4.无连接(请求一次响应一次 之后立马断开连接)
websocket 相当于是HTTP协议的一个大的补丁 它支持长连接

请求数据格式
请求首行(标识HTTP协议版本,当前请求方式)
请求头(一大堆k,v键值对)
\r \n
请求体(携带的是一些敏感信息比如 密码,身份证号...)

响应数据格式
响应首行(标识HTTP协议版本,响应状态码)
响应头(一大堆k,v键值对)

响应体(返回给浏览器页面的数据 通常响应体都是html页面)

响应状态码
用一串简单的数字来表示一些复杂的状态或者提示信息
1XX:服务端已经成功接收到数据正在处理 可以继续提交额外的数据
2XX:服务端成功响应相应数据(请求成功200)
3XX:重定向(当你在访问一个需要登录之后才能访问的页面 你会发现窗口会自动跳到登录页面 301 302)
4XX:请求错误(请求不合法不符合内部规定服务端拒绝访问403,请求资源不存在404)
5XX:服务器内部错误(500)

注意:每个公司都可以自定义自己的状态吗,不需要完全依照上面的规定。

请求方式
1.get请求
朝服务端要资源(比如浏览器窗口输入www.baidu.com)
2.post请求
朝服务端提交数据(比如用户登录 提交用户名和密码)

URL:统一资源定位符(Uniform Resource Locator),也被称为网页地址,是因特网上标准的资源的地址。

HMTL(HyperText Mark Language)

超文本标记语言
要想让你的页面能够正常被浏览器显示出来 你所写的页面 就必须遵循html标记语法
也就意味着所有能够被浏览器显示出来的页面 内部都是html代码

浏览器只认识html css js

web本质
浏览器
服务器
文件(后缀名是.html结尾的文件,也就意味着 只要看到.html结尾文件 那么它就是一个前端页面文件)
文件的后缀名仅仅是给人看的 计算机无所谓 因为都是二进制数据

HTML注释

写网页的一套标准

注释是代码之母


一般情况下 html的注释都会按照下面的方式书写

HMTL文档结构

 <html>
    <head></head>:head内的标签 不是用来展示给用户看的  而是定义一些配置 主要是给浏览器看的
    <body></body>:body内的标签 就是浏览器展示给用户看的内容
    </html>

html页面打开方式

1.找到文件路径 选择浏览器打开
2.pycharm快捷方式直接打开

标签的分类

标签的分类1:
    1.双标签(<h1></h1> <a></a>)
    2.单标签(自闭和标签 <img/>) br hr 
	 
                        
标签的分类2
	1.块儿级标签(独占浏览器一行)
        div  p  h  
        1.块儿级标签可以修改长宽
        2.块儿级标签内部可以嵌套任意的块级标签
        但是p标签虽然是块儿级标签  但是他不能够其他块儿级标签 包括自身
        可以嵌套行内标签
        总结:
            只要是块儿级标签 都可以嵌套行内标签
            p标签只能嵌套行内 其他块儿级可以嵌套任意的块儿级标签
   2.行内标签(自身文本多大就占多大)
		span b s i u a img
		div和span通常都是用来构建网页布局的

head内常用标签

title用来显示网页标题
style用来控制样式的 内部支持写css代码
script内部支持写js代码 也支持导入外界的js文件
link专门用来引入外部的css文件
meta:
keywords content(定义搜索关键字)
description content(定义搜索关键字下的描述信息)

body内常用标签

body内常用标签
基本标签
h1~h6(标题标签):

标题1

自动将文字信息加粗加黑
p(段落标签):

段落标签


i(斜体):斜体
u(下划线):下划线
s(删除线):删除
br(换行):

hr(水平线):

符号:
内容 对应代码
空格  
> >
< <
& &
¥ ¥
版权 ©
注册 ®

常用标签
div
span
p(段落标签)
img
src存放的是图片的路径(该路径可以是本地的也可以是网上的)
1.也可以放url(会自动请求该url获取相应数据)
2.也可以直接放图片的二进制数据 会自动转换成图片
alt当图片加载不出来的时候 显示的提示信息
title当鼠标悬浮在图片上 提示的信息
height,width 当你只指定一个参数的时候 另外一个会等比例缩放
a标签
href:
1)后面存放url的时候 点击跳转到该url
如果该链接没有被点过 那么默认是蓝色,只要点过依次 之后都是紫色
target:
_self当前页面跳转(默认)
_blank新建页面跳转

2)锚点功能(a标签的id值)
href还可以写另一个a标签的id值,点击就会跳到id值所对应的a标签

列表标签:
ul:无序列表 type参数


  • 第一项

  • 第二项

type属性:
disc(实心圆点,默认值)
circle(空心圆圈)
square(实心方块)
none(无样式)

ol:有序列表 type参数


  1. 第一项

  2. 第二项

type属性:
1 数字列表,默认值
A 大写字母
a 小写字母
Ⅰ大写罗马
ⅰ小写罗马

dl:标题标签


标题1

内容1

标题2

内容1

内容2

表格标签(*****)





















序号 姓名 爱好
1 奋斗 杠娘
2 Yuan 日天

tr表示一行
th和td都是文本
建议在thead内用th
tbody内用td

属性:

border: 表格边框.
cellpadding: 内边距
cellspacing: 外边距.
width: 像素 百分比.(最好通过css来设置长宽)
rowspan: 单元格竖跨多少行
colspan: 单元格横跨多少列(即合并单元格)

标签三个重要的属性

1.id值 该值就类似于人的身份证号 在用一个html文档id应该保证唯一不重复
2.class值 该值就类似于面向对象里面的继承 可以写多个
3.style(不是必备) 支持在标签内直接写css代码 属于行内样式 优先级最高
补充 任何标签都支持自定义属性!!!

form(表单标签)

​ 能够接收用户输入(输入 选择 上传)并将其发送给后端

action:控制数据提交的目的地
				1.不写的情况下 默认提交到当前页面所在的路径
				2.写全路径(https://www.baidu.com)
				3.路径后缀(/index/)
method:控制数据的提交方式,默认是get请求
enctype:控制前端向后端提交数据的编码格式

<lable> <label/> 标签通常是配合input一起使用的,input框外部套label标签,input标签就不会漂黄了,而且 <label for="id值(input框)">,绑关系之后,点击label任意的内容都能聚焦到对应的id值的input框;
input标签  获取用户的输入框
    type:
        text:普通文本
        placeholder:留白(可以在input输入框加入默认的内容,输入时可以修改)
        password:密文 不展示明文
        date:日期
        submit:触发提交动作
        button:普通按钮 没有实际意义 但是可以通过js绑定事件实现自定义动作*-+\
        reset:重置表单内容
        radio:单选  可以通过checked控制默认选择(当属性值和属性名相同的情况下 可以简写 checked)  checked="checked"
        checkbox:多选 同上 可以设置默认值
        file:获取用户上传的文件
        type还可以指定一个参数 disabled(禁用模式)或者readonly(只读模式)
            
select标签
        默认是单选  可以通过multiple变成多选
        如果想默认选择  用selected  (selected="selected")
textarea标签
	    获取用户输入的大段文本

    
form表单默认是get请求需要通过method参数,将get请求换成post提交
	form表单触发提交动作的两种情况:
            1.input标签type指定成submit
            2.直接写button标签
      
总结:获取用户输入(输入 选择 上传...)的标签 都必须有一个name属性,就类似于字典的key,而标签获取到的用户写入的值就类似于字典的value;
<input type="text" id="d1" name="username" value="默认值">
			name就相当于是字典的key
			value就是字典的值
			获取都的用户输入都会被放入value属性中
            
form表单传文件的时候 需要指定enctype参数(***)

form表单在浏览器端向后端提交数据演示(这里用flask后端框架)

# 1.首先先启动服务端,浏览器端输入用户数据,commit提交(这里注册1是commit按钮)

from flask import Flask,request
app=Flask(__name__)
@app.route('/index/',methods=['GET','POST'])
def index():
    print(request.form)
    print(request.files)
    file_obj = request.files.get("avatar") # 获取客服端传来的文件
    file_obj.save('xxx.pdf') # 将客户端传来的文件保存到服务端本地
    return '收到了'  # 客户端提交数据返回给客户端页面的数据
app.run()
# 2.启动HMTL界面

# form表单.hmtl 
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录注册</title>

</head>
<body>
<h1>注册界面</h1>
<form action="http://127.0.0.1:5000/index/" method="post" enctype="multipart/form-data">
    里面加上novalidate参数,表示
    <p>
    <!--写上label标签,input不会飘黄,另外有一个好处是,写上之后再登录界面上直接点击input框前面文字描述,光标就能直接弹进input框内-->
    <label for="d1">
        <!--值disabled位置可以写readonly表示只读-->
        <!--username:<input type="text" id = 'd1' name ='username' readonly>-->
        <!--username:<input type="text" id = 'd1' name ='username' disabled>-->
        username:<input type="text" id = 'd1' name ='username' >
    </label>
    </p>
    <p>
            <!--不指定type为password,默认输入的是明文密码,加上password密码以密文显示-->
            <label for="d2">password:<input type="password" id = 'd2' name ='password' checked="checked"></label>

    </p>
    <p>
        <!--与上面写法一样,直接将input写在label外部,-->
        <label for="d3"></label>
        birthday: <input type="date" id="d3" name = 'birth'>
    </p>
    <p>性别:
        <label for="">
            <input type="radio" name = 'gender' checked value="male">男
            <input type="radio"  name = 'gender'>女
        </label>
    </p>
    <p>爱好:
        <label for="">
            <input type="checkbox" name = 'hobby' value="basketball">篮球
            <input type="checkbox" name = 'hobby' value="basketball">足球
            <input type="checkbox" name = 'hobby' checked value="yumaoqiu">羽毛球
        </label>


    </p>
    <p>前女友:
        <select name="" id="" multiple>
            <option value="">新垣结衣</option>
            <option value="">cang</option>
            <option value="">sijiali</option>
         </select>
    </p>
    <p>
        <select name="" id="">
           <optgroup label="北京">
               <option value="">朝阳区</option>
               <option value="">海淀区</option>
               <option value="">昌平区</option>
            </optgroup>
            <optgroup label="上海">
                <option value="">闵行开发区</option>
                <option value="">青浦区</option>
                <option value="">普陀区</option>
            </optgroup>
            <optgroup label="安徽">
                <option value="">阜阳</option>
                <option value="">黄山</option>
                <option value="">淮北</option>
            </optgroup>
        </select>
    </p>
    <p>file
        <input type="file" name ="avatar">
    </p>
    <p>个人简历:
        <!-- cols和rows可以调节文本框的大小-->
        <textarea name="info" id="" cols="30" rows="10"></textarea>
    </p>
    <p>
        <input type="hidden">
    </p>

    <input type="submit" value="注册1">
    <input type="reset" value="注册2">
    <input type="button" value="注册3">
    <button>button标签</button>
</form>
</body>

3.在浏览器页面用户输入信息并点击“注册1”按钮网后端提交数据

4.后端收到客户端的数据及文件

posted on 2019-11-13 00:49  jueyuanfengsheng  阅读(270)  评论(0)    收藏  举报