前端篇之html认识

一、html标签概述


 1.1 引入

  url:协议+域名+路径,是一个请求发给服务器

        服务器
            #__author:  Administrator
            #date:  2016/10/28



            import socket

            def main():
                sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
                sock.bind(('localhost',8089))
                sock.listen(5)

                while True:
                    connection, address = sock.accept()
                    buf = connection.recv(1024)
                    print(buf.decode('utf8'))

                    #connection.sendall(bytes("HTTP/1.1 201 OK\r\n\r\n","utf8"))
                    #connection.sendall(byte(<h1>Hello</h1>))---写到文件里如下hello.html
                    with open('hello.html','rb') as f:
                        data=f.read()
                    connection.sendall(data)


                    connection.close()

            if __name__ == '__main__':

                main()
             用浏览器访问能看服发的内容

1.2 html语言,标签语言

1.html css js区别:html标签元素,css会布局与色彩  js是动态展示

2.html元素,只有浏览器认识这些标签,浏览器会解析它

<!DOCTYPE html>---固定格式
<html lang="en">
<head>
    <meta charset="UTF-8">//编码格式
    <!--<meta http-equiv="Refresh" content="2;URL=https://www.baidu.com">-->
    <!--<meta http-equiv="Refresh" content="2">-->
    <title>Yuan</title>
    <link rel="icon" href="girl.ico">

</head>----与body是平行的
<body>
        <!--hello yuan-->

        <!--<h1>yuan</h1>-->
        <!--<h2>yuan</h2>-->
        <!--<h3>yuan</h3>-->
        <!--<h4>yuan</h4>-->
        <!--<h5>yuan</h5>-->
        <!--<h6>yuan</h6>-->

窗前明月光<br/>
我叫郭勇昌


<p>窗前明月光</p><p>我叫郭勇昌</p>
</body>
</html>
元素分层
                       根元素html
            head元素               body元素
        meta    title               div   p  等   

3.html之head及body标签

(1)概述:

        head:头标签,浏览器看不到,一些解析相关的内容

        body:是展示出来的内容

                 非自闭合标签

                  自闭合标签

 

         标签属性:加在标签<>里

                  <h1 id="xiaohu">yuan</h1>-----id是标签身份证,区分多个h1

(2)标签介绍

  

    嵌套规则:块级的能嵌套内联标签,但内联标签不能嵌套块级的
              某些特殊块级的不能嵌套如p h
              
    <!DOCTYPE html>--用什么规则展示标签内容,是一个标准,浏览器默认是怪异模式,加上它后变为标准模式
    <html>
  1.<head>内标签
      <meta>---自闭合标签,只有一个,属性只有二个name,http-equiv
        <meta name="keywords" content="开发者,程序员">---搜索引擎搜的内容命中就会展示他的内容            
        <meta name="description" content="是一个面向开发者">---是搜索出来展示的描述信息
        <meta http-equiv="Refresh" content="2;URL=https://www.baidu.com">
                                 ---与请求有关,2s后跳转到后面的URL上,若不加URL就2s刷新
        <meta http-equiv="content-Type" charset=UTF8">
        <meta http-equiv='X-UA-Compatible' content="IE-EmulateIE7"/>----兼容IE7的渲染规则,想支持几改为几
     <titil>---非自闭合 
         <titil></titil>
     <link>---自闭合标签
         <link rel='icon' href="//www.id.com/favicon.ico">---打开网页的显示的图片,图片是URL地址
     <script>---引入css内容,<link>可引入js
     </head>
  2.<body>
        所有标签分为块级标签与内联标签
        (1)<h1>yuan</h1>--块级标签 
           <h2>yuan</h2>----一直到h6,会一级级减小
        (2)<p></p>--块级标签,换行与隔行过程,默认不加标签时不认换行,
                   不在一行会连一起中间空个格,<p>有二个作用,换行及隔行
        (3)<br>    :换行内联标签
        (4)<hr>:加个水平线内联标签                    
        (5)**<div></div> ---块级的,没有功能,没有特殊格式化,这个什么没做主要用与css渲染
           <div style="color:rebeccapurple">hello world</div>--内嵌入css代码
            css嵌入有四种方法:
                1.标签内嵌  
                2.<head>里的<script>
                3.<body>里单独的标签<style></style>
                    <div>hello world</div>
                    <style>
                         div{---是块级标签,它定义的表示一整行都是它的,
                                对他的处理表示对一整行的处理,而非文本本身大小的处理
                            color:#cc3399;
                            background-color:yellow;---整行背景变色
                         }
                    </style>
       
        (6)<span></span>---同div,没任何格式化,与div区别,它内联标签
            <span>hello span</span>
            <style>
                 span{
                    color:#cc3399;
                    background-color:yellow;---标签里的文本背景变
                 }
            </style>                         
     
        (7)<b></b>--给字体加粗--内联标签
        (8)<em>变成斜体</en>--内联标签
        (9)<strike>去除</strike>----内联标签,现在不使用改为<del></del>
        (10)2<sup>3</sup>--2的3次方,上角标
           <sub></sub>--下角标
        (11)&nbsp;--特殊符号表一个空格
        (12)<img src="路径" width="200px" heigh="200px" alt="失败" title=""></img>
             //图片,内联标签
               alt属性表加载图片失败后返回的值
               title表鼠标入图片显示的文本
               当有img时,会专开一个线程加载图片,其它线程可继续向下执行代码
        (13)<a href="http://www.baidu.com">百度</a>---超链接,有二个功能,一个是链接,一个是锚(索引查找)
            <a href="http://www.baidu.com" target="_blank">百度</a>
               href放其它标签里不会跳只有a才行
               当href为#是不跑但会刷新 
            锚作用:
                <a href="#div1">第一章</a>---追踪哪个标签,身份证号前加#
                <a href="#div2">第二章</a>---直接跳到下面的二章内容
                <div id="div2">第一章</div>
                <div id="div2">第二章</div>
                <style>
                    #div1{----按身份证找到div,前加#后跟身份证号
                         color:#cc3399;
                    }f
                    #div2{
                        heigt=200px--css代码
                    }                                        
                </style>
                
        (14)列表标签
           <div>
           <ul>--不排序列表,都是块级标签
               <li><img></img></li>---固定用这个li引入内容,用于左边目录结构 
               <li>1</li>
               <li>1</li>//想它们只重叠放一个位置上,
                  整体放在div里,把div居中
                      margin: 0 auth; 
                      position:relative对li里的图片做处理,三个都以div做相对位置处理,
                      position:absolute; 
                      top:0 
                      left:0
           </ul>---结果就是前加点有二行1    

           
           <ol>---排序列表
               <li>1</li>
               <li>1</li>
               <li>1</li>                           
           </ol>---结果前有序号,有序号的二行    

           
           <dl>
              <dt>第一章</dt>---标题
              <dd>内容<dd>---内容 
              <dt>第二章</dt>
              <dd>内容<dd>
           </dl>
           
        (15)table表
             <table border="1" cellspacing cellpadding>:<tr>:<td><th>  合并单元格rowspan colspan
                 <thead>--显示字段框
                    <tr>--表行数据
                    <th>--表字段值(属性:colspan="#"行合并几格)
                 <tbody>--显示行数据格
                     <tr>--表行数据
                     <td>--表行数据 (属性:rowspan="#"列合并几格)
        (16)form表单,与服务交互使用的,表单用于向服务器传输数据内联标签
            表单能够包含input,比如文本字段、单选程,提交按钮等,还可以包含textored select fieldset label元素                        
            <form action="127.0.0.1:8090/index" method="get/post" enctype="multipart/form-data">
                     input里的内容以method的方式提交active里url里,enctype发送文件可一段段发送
                     要提交文件必须加enctype,obj = request.FILES.get('fafafa'),
                     后台要一段段取obj.chunks()再放入文件里,obj是文件对象
                <p>姓名:<input type="text" name="username"></p>
                             input自闭合标签,结果是一个输入框,
                             这时发给服务器的内容是一个字典username:输入到框的内容
                <p>密码:<input type="password" name="username"></p>
                             结果到这只能输入信息无法提交到服务器?
                             这时输密码会看不到明文,见下:                                
                <p><input type="submit" value="press"></p>
                   页面上会有个提交按钮,能把写的值提交,加上value时提交按钮名变为这个值,
                   如何提交到服务器?见form属性,提交到form的active里
                <p><input type="button" value="press"></p>
                   也是按钮,但点击后不提交,只有配合js使用才有意义,一般用于绑定函数
                <p>篮球<input type="checkbox" name="hobby" value="1"></p>
                       复选框,有个小方框,可以点中选择,可多选
                <p><input type="checkbox" name="hobby" value="2"></p>
                       为什么是复选,因name虽然一样但发的value不同                                 
                <p><input type="radio" name="sex" value="1"></p>
                       单选框,如男女只能选一个,是一个圆圈,radio是互次的
                <p><input type="radio" name="sex" value="2"></p>
                       只有当name一样里只能选一个,name属性是给服务器看的,
                       只能给一个值,所以name是定义键值的
                <p><input type="file" name="alex"></p>    
                    结果出现一个上传文件的按钮,点击可以上传文件
                <p><input type="reset" value="重置"></p>
                     重置按钮,把输的内容都清空
                <p>出生地
                    <select name="city" multiple size="2">
                          multiple加它表可选多个值,size最多展示几个
                         <optgroup lable="河北省">
                         <option value="beijing">廊坊2</option>
                         <option value="beijing">廊坊2</option>
                         </optgroup>----可看到分组,河北下有多个地方
                         
                         <option value="beijing">北京</option>
                         <option value="tianjing">天津</option>--发给服务端的是city:beijing这样的情况
                         
                    </select></p>---会出现一个框下拉选择北京或天津也会上传给服务端交互
                     注:checkbox与radio需要定name与value做字典传服务,其它的定义name就行
                <textarea rows="10" cols="10">自我简介</textarea>----10行10列
            </form>                            
            实例:服务器如何与前端交互,web框架
            前端:
            index.html
               ....
               <form action="ip+port/xiao/" method="get">
                ...
               </form>    
            后端:               
            urls.py
              from django.conf.urls import url
              form django.contrib import admin
              form app01 import views                                
                urlpatterns = {
                        url(r'^admin/',admin.site.urls),
                        url(r'^xiao',views.xiao)--IP+port+xiao在浏览器上访问就可以访问到index.html的内容
                }
            views.py
              form django.shortcuts import render
                def xiao(req):--rep是前端提交的数据
                    print(req.GET)
                        用get提交的数据,get发数据,点提交时url变为
                        ip+port+xiao&username=dan&password=123&hobby=football
                        把url与参数一起传到后端,用url把数据发过来
                    print(req.POST)
                        用post提交的数据,会把参数放请求体里发送后端,
                        F12的network里的form Data里把字典数据发到服务端
                    print(req.FIIES)
                        提交的文件等封装在这个对象里,req.FLIES={"alex":"文件"}
                    for item in req.FILES:---item是键alex
                        obj=req.FILES.get(item)----会取到文件,若没有也不会报错
                        filename=obj.name-----取文件名字
                        f=open(filename,'w')
                        for line in obj.chucks:---把文件一段段上传
                            f.write(line)
                        
                    return render(req,"index.html")
                           服务端运行后在浏览器上访问出现表单,里面的表单发给后端要如何处理?
                           这里发的内容会发给ip+port+xiao给它后把字典数会交给views.xiao函数去处理,
                           每一个url都有对应的函数去处理                                    
     </body>

1.3 http协议

      1.http之请求协议
        无状态协议,请求一次后页面返回后就断开了,不是长链接,
        每点一次请求一次,每次请求就是新的,服务不会记住上次连接信息,
        但当有用户登录时有记忆不是通过http来记的而用的是authkey sesion来记住登录信息及购物记录信息
        
      请求协议F12:---浏览器封装一定格式发给服务器
        eg:浏览器会把url:https://www.baidu.com封装成一定格式发给服务器
            headers(包括请求头及响应头)
                    Generl
                    Response Headers:响应头
                    Request Headers:请求头    
                    Request payload:请求体(post)                                            
            preview:请求返回的内容
            response
            cookies
            timing
      请求协议:
            请求首行:// 请求方式  请求路径  协议与版本   
                GET /index.html HTTP/1.1
            请求头信息:// 请求头名称:请求头内容,
                key:value    eg:host:localhost
            空行; // 用来与请求体分隔开
            请求体。// GET没有请求体,只有POST有请求体。
                    发给服务器真正的数据,get是通过url发过去的,值通过请求头给的    
                GET /index.html HTTP/1.1
                Host:localhost
                注:什么时候用到get:
                    1.一般输入一个URL就是get提交 
                    2.超链接用GET 
                    3.form默认是get请求
            GET请求特性:请求头里的键值对
                Accept
                accept-encoding:压缩
                accept-language
                cache-coatrol:是否有缓存
                user-agent:告诉服务器浏览器系统版本等
                Aaccept-charset:utf-8,告诉服务器用什么编码
                connection:连接成功后不会马上断,默认3s再断有个延时
                cookile:第一次登录后退出,想再次登录服务器就不认识了还要再登录,
                         就出现了cookile,这个cookile是浏览器第一次登录时服务器发给浏览器
                         的一个字符串存在浏览器的cookile里,再次去访问这个服务器时把
                         这个cookile发给服务器验证,每个用户的cookile是不同的,
                         这就是上次服务器返回带给服的
            POST请求特性:
                1.数据不会出现在地址栏中
                2.数据的大小没有上限
                3.有请求体(在Request Payload里传)
                4.请求体中如果存在中文会使用URL编码!
                  username=%E5%BC%E2%EB&password=123
            Referer:超链接的上一个网址
            keyword=hello:请求体长度
            Content-Type:opplication/x-www-form-urlencoded:放在请求体里的,
                        表单的数据类型,会使用Url格式编码数据,
                        url编码数据都是以%为前缀,后跟二位16进制    
                <meta http-equiv="content-Type" charset=UTF8">--meta就是改请求头里的内容                        
     2.http之响应协议,服务器给浏览器发的内容
        响应首行
        响应头信息
        空行
        响应体


        HTTP/1.1 200OK
        Server:服务器版本信息
        content-type:响应体使用的编码UTF8
        content-length:响应体长度
        set-cookie:响应给客户端的cookie
        状态码:
            200
            404:资源找不到
            500:服务器内部出错
            302:重定向
            304:第一次浏请求服,服务会响应200并发一个index.html页面的最后修改时间,
                 浏览器就会缓存这个页面,当浏再次请求服,比对一个这个页面的修改时间
                 当一样里服就返回304,浏就在自己的缓存里找    

 

 

  

posted @ 2021-01-23 16:50  xiong_Dana  阅读(54)  评论(0编辑  收藏  举报