zoukankan      html  css  js  c++  java
  • 前端之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
    
    ')
        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键值对)
    	
     
    
    	请求体(携带的是一些敏感信息比如 密码,身份证号...)
    
    响应数据格式
    	响应首行(标识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(标题标签):<h1>标题1</h1>   自动将文字信息加粗加黑
            p(段落标签):<p>段落标签</p>
    	    i(斜体):<i>斜体</i>
    	    u(下划线):<u>下划线</u>
    	    s(删除线):<s>删除</s>
    	    br(换行):<br>
    	    hr(水平线):<hr>	    
    	    
       符号:
        内容	对应代码
         空格	 &nbsp;
         >	  &gt;
         <	  &lt;
         &	  &amp;
         ¥	  &yen;
        版权	&copy;
        注册	&reg;
    
    
        常用标签
            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参数
                
                <ul type="disc">
                  <li>第一项</li>
                  <li>第二项</li>
    		   </ul>
    		   
    		   type属性:
                    disc(实心圆点,默认值)
                    circle(空心圆圈)
                    square(实心方块)
                    none(无样式)
                    
                ol:有序列表   type参数
                
                	<ol type="1" start="2">
                      <li>第一项</li>
                      <li>第二项</li>
    			   </ol>
    			   
    			type属性:
                    1 数字列表,默认值
                    A 大写字母
                    a 小写字母
                    Ⅰ大写罗马
                    ⅰ小写罗马
    			  
    			dl:标题标签
                    <dl>
                      <dt>标题1</dt>
                      <dd>内容1</dd>
                      <dt>标题2</dt>
                      <dd>内容1</dd>
                      <dd>内容2</dd>
                    </dl>
    
         表格标签(*****)
            <table>
              <thead>
              <tr>
                <th>序号</th>
                <th>姓名</th>
                <th>爱好</th>
              </tr>
              </thead>
              <tbody>
              <tr>
                <td>1</td>
                <td>奋斗</td>
                <td>杠娘</td>
              </tr>
              <tr>
                <td>2</td>
                <td>Yuan</td>
                <td>日天</td>
              </tr>
              </tbody>
            </table>
    
            tr表示一行
            th和td都是文本
            建议在thead内用th
            tbody内用td
    
            属性:
    
            border: 表格边框.
            cellpadding: 内边距
            cellspacing: 外边距.
             像素 百分比.(最好通过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.后端收到客户端的数据及文件

  • 相关阅读:
    ios添加第三方字体
    IOS 适应各种iphone屏幕尺寸
    sqlite第三方类库FMDB的使用
    IOS--沙盒机制
    用plist建立UITabController
    Xcode7 使用NSURLSession发送HTTP请求报错[转]
    网络开发--NSURLConnection类的简单介绍
    TF-IDF
    《汇编语言》——王爽 第12章 内中断
    操作系统 L4操作系统接口+L5系统调用的实现(网易公开课)
  • 原文地址:https://www.cnblogs.com/zhangchaocoming/p/11846371.html
Copyright © 2011-2022 走看看