目录
一、表格标签
<table border="1" cellpadding="5"> # border表示表格边框宽度,cellpadding表示内含文本距离边框的单位 块级标签 里面其他的是行内标签
<thead># 表头
<tr> # tr表示一行 th、td是一个单位
# <!--<td></td>-- th td ,th比td加粗一点,用啥都行-->
<th>账号</th>
<th>密码</th>
<th>爱好</th>
</tr>
</thead>
<tbody>
<tr>
<td>黄钊</td>
<td>123</td>
<td>xxx</td>
</tr>
<tr>
<td>李肖彤</td>
<td>123</td>
<td>xxx</td>
</tr>
</tbody>
</table>
二、表单标签
功能:能够回去前端用户的数据,基于网络发送给后端
<form action=""></form>
'''
这个form标签内供用户书写的数据会被这个表单提交给action的后端
action:控制数据提交的后端路径(服务端)
1.什么都不写,默认给当前页面的url提交数据
2.写路径全称:https://www.baidu.com 朝百度服务端提交
3.直接路径后缀:/index/
会自动拼接到当前页面ip+端口后=》》》ip+port/index/
method:控制请求方式
默认:get
虽然能携带数据,但是数据是在url后面的,不安全且小
post请求
携带数据放在请求体里面(表单提交必须修改post)
enctype 控制数据的编码格式
默认:urlencoded 只能发送普通文本,文件只能接收文件名
修改为formdata可以接收文件
'''
1 form内最重要的就是input标签,它通过type变形
- text:普通文本
- passowrd:密文
- date:有下拉框可选择的日期
- submit:用来触发表单的提交数据,按钮
- button:本身没有功能,可以后期添加,按钮
- reset:重置内容,按钮
- radio:单选
- 相同name的input标签属于同一单选内容
- 单选是必须选,不能取消只能选别的
- 后面加checked = “checked” 表示默认值,当属性值和属性名相同时可以简写只写属性名
- checkbox:多选
- 不需要指定相同name
- 可以取消可以不选,可以全选,默认值可以设置多个
- file:获取文件
- 后跟multiple表示可以多选,默认单选
ps:在文本框后加placeholder可以给文本框添加默认值
- 后跟multiple表示可以多选,默认单选
2 select标签
默认单选,后加multiple变成多选,selected表示默认值
<select name="" id="" multiple>
<option value="" selected>a</option>
<option value="">b</option>
<option value="">c</option>
</select>
3 textarea标签
大段文本框
<textarea name="" id="" cols="30" rows="10"></textarea>
# cols 宽度 rows 长度
4 重点
# 能触发form表单数据提交的按钮
1、<input type="submit" value="注册">
2、<button>点我</button>
# 用户输入的数据在后端获取到的是一个个kv键值对
# 所以在前端书写的时候每个用户书写的标签都要加上name 等于key 用户的数据 等于value
三、通过flask实现表单提交
服务端代码
from flask import Flask,request
app = Flask(__name__)
@app.route('/hz/',methods=['GET','POST'])
def hz():
print(request.form)
print(request.files)
file_obj = request.files.get('mytupian.pug')
file_obj.save(file_obj.name)
return 'hznb'
app.run()
页面代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>注册页面</h1>
<form action="http://127.0.0.1:5000/hz/" method="post" enctype="multipart/form-data">
<label for="d1">
姓名:<input type="text" id="d1" name = "姓名">
</label>
<label for="d2">密码</label>
<input type="password" id="d2" name="密码">
<!--单选 指定相同name才是一类单选-->
<p>
<input type="radio" name="sex" checked value="男">男
<input type="radio" name="sex" value="女">女
</p>
<!--多选 不用指定name -->
<p>
<input type="checkbox">a
<input type="checkbox">b
<input type="checkbox">c
</p>
<p>
<!-- multiple表示可以多选-->
<input type="file" multiple name = 'file'>
<input type="file" >
</p>
<p>
<select name="" id="" multiple name="select">
<option value="" selected value="a">a</option>
<option value="" value="b">b</option>
<option value="" value="c">c</option>
</select>
</p>
<p>
<textarea name="" id="" cols="30" rows="5"></textarea>
</p>
<p>
<input type="date">
</p>
<p>
<input type="submit">
<input type="button" value="button">
<input type="reset">
<button></button>
</p>
</form>
</body>
</html>
四、css
1 css的三中引入方式
-
直接在head里通过style写
-
<style> 选择器{ 属性:值 } </style>
-
-
通过link标签引入css文件(最正规)
-
<link rel="stylesheet" href="mycss.css">
-
-
行内式(一般不用)
-
<h1 style="color: green">老板好 要上课吗?</h1>
-
2 css选择器
- id选择器:对指定id的标签修改
-
id{ }
-
- 类选择器:对指定类的标签修改
- .class{ }
- 元素/标签选择器:对指定标签修改
- span{ }
- 通用(全局)选择器:全局修改
- *{}
3 组合选择器
- 后代选择器
- div span{ } div下所有的span标签
- 儿子选择器
- div>span{ } div下直系span标签(单层嵌套)
- 毗邻选择器
- div+span{ } div同级别的第一个span
- 弟弟选择器
- div~span{ } div同级别的所有span
4 属性选择器
- 含有某个属性
- [username] { 对所有有username属性的标签修改}
- 含有某个属性且有对应的值
- [username = 'hz']{ 对所有username=‘hz’的标签修改}
- 含有某个属性且有对应的值的特定标签
- input[username = 'hz'] { 对所有username=‘hz’的input标签修改}