1.app.py
from flask import Flask,render_template
import sqlite3
app = Flask(__name__)
@app.route(‘/‘)
def index():
return render_template("index.html")
## http://www.cssmoban.com/ 模板之家
## 图标网站:https://www.iconfont.cn/
## ECHARTS网站:https://echarts.apache.org/zh/index.html
## 网站模板下载:http://www.cssmoban.com/cssthemes/9296.shtml
## 1、将模板解压,将index.html放入到模板templates中 -- 动态渲染模板
## 2、将assets放入static中 -- 静态文件
## 注意修改index.html中的地址assets改为static/assets
@app.route(‘/index‘)
def home():
return index()
@app.route(‘/movie‘)
def movie():
datalist = []
conn = sqlite3.connect("movie.db")
cursor = conn.cursor()
sql = "select * from movie250"
data = cursor.execute(sql)
for item in data:
datalist.append(item)
cursor.close()
conn.close()
return render_template("movie.html",movies = datalist)
@app.route(‘/score‘)
def score():
score = [] ##电影评分
num = [] ## 每个电影评分对应电影数量
conn = sqlite3.connect("movie.db")
cursor = conn.cursor()
sql = "select score,count(score) from movie250 group by score"
data = cursor.execute(sql)
for item in data:
score.append(str(item[0])) ## 此处可以不用转为str类型,需要转换时,同时在HTML中使用score|tojson 转换
num.append(item[1])
cursor.close()
conn.close()
return render_template("score.html",score=score,num=num)
@app.route(‘/word‘)
def word():
return render_template("word.html")
@app.route(‘/team‘)
def team():
return render_template("team.html")
if __name__ == ‘__main__‘:
app.run()
1.app.py
## Flask包含werkzeug和jinja2,其中route为werkzeug,render_template包含了jinja2
## request,表单请求模块
## 引入模块和渲染模板
from flask import Flask,render_template,request
app = Flask(__name__) ## 模块初始化,也就是将flask框架引入当前的文件app程序中,__name__为执行条件
## 路由解析,通过用户访问的路径,匹配相应的函数
## 设置FLASK_DEBUG = 1,开启调试模式,右上角flask_demo勾选FLASK_DEBUG,重启
# @app.route(‘/‘)
# def hello_world():
# return ‘hello,world!‘
@app.route("/index")
def hello():
return "test function hello."
## 通过访问路径,获取用户的字符串参数
@app.route("/usr/<name>") ## 浏览器传参,<变量>为接收传参变量,http://127.0.0.1:5000/usr/zhangfd
def welcome(name): ## 将传入的参数作为函数的参数
return "welcome,%s"%name ## 函数参数调用
## 通过访问路径,获取用户的整形参数, 此外,还有float类型
@app.route("/usr/<int:id>") ## 路由路径不能重复,用户通过唯一路径访问特定的函数
def welcome2(id): ## 函数不能重复
return "welcome,%d 号会员"%id
## 使用HTML渲染
# @app.route("/")
# def index2():
# ## 在templates中定义html文件,templates -- new --html file -- 如:index
# return render_template("index.html") ## 内容在HTML中定义,并且能够识别渲染
## 向页面传递变量
import datetime
@app.route("/")
def index2():
## 在templates中定义html文件,templates -- new --html file -- 如:index
time = datetime.date.today() ## 普通变量,html中使用{{ var }}接收
name = ["小张","小赵","小王"] ## 列表类型
task = {"任务":"打扫卫生","时间":"3个小时"} ## 字典类型
return render_template("index.html",var=time,list=name,task=task)
## 表单提交
@app.route("/test/register") ## /test/register是浏览器访问路径
def register():
return render_template("test/register.html") ## test/register 是文件路径
## 接收表单提交的路由,需要指定methods为post
@app.route("/result",methods=[‘POST‘,‘GET‘])
def result():
if request.method == ‘POST‘:
result = request.form
return render_template("test/result.html",result = result)
if __name__ == ‘__main__‘: ## __name__ 为全局变量
app.run() ## 调用run方法,启动服务器,监听5000端口,做相应操作
2. index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body >
今天是{{ var }},欢迎光临<br> <!-- 普通变量使用{{ var }} -->
今天值班的有:<br>
{% for data in list %} <!--for 循环控制结构,此外还有if-->
<li>{{ data }}</li> <!--循环语句-->
{% endfor %} <!--for 循环结束-->
任务:<br/>
<table border="1">
{% for key,value in task.items() %} <!--[(key,value),(key,value),(key,value)]-->
<tr>
<td>{{ key }}</td>
<td>{{ value }}</td>
</tr>
{% endfor %}
</table>
</body>
</html>
3.register.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="{{ url_for(‘result‘) }}" method="post">
<p>姓名:<input type="text" name="name"></p> <!--此处的name属性定义的是字典的key,输入的为value-->
<p>年龄:<input type="text" name="age"></p>
<p>性别:<input type="text" name="sex"></p>
<p>地址:<input type="text" name="add"></p>
<p><input type="submit" value="提交"></p>
</form>
</body>
</html>
4.result.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<table border="1">
{% for key,value in result.items() %} <!--[(key,value),(key,value),(key,value)]-->
<tr>
<td>{{ key }}</td>
<td>{{ value }}</td>
</tr>
{% endfor %}
</table>
</body>
</html>
urllib补充知识点
#-*- codeing = utf-8 -*-
#@Time : 2020/6/9 22:30
#@Author : zhangfudong
#@FILE :testUrllib.py
#@Software : PyCharm
## urllib补充知识点
## 引入urllib库下的request模块
import urllib.request
# 获取一个网页,get请求方式
## 打开网页获取数据并返回
response = urllib.request.urlopen("http://www.baidu.com")
# ## 读取返回结果,使用utf-8字符集解析
print(response.read().decode(‘utf-8‘))
# post请求方式
## 网址httpbin.org,专门测试请求响应的网站,http mathods
## 模拟网站登录时就需要使用post方式,如将账号密码的键值对cookie信息发过去等等
import urllib.parse
data=bytes(urllib.parse.urlencode({"hello":"world"}),encoding="utf-8") ## 参数data封装为二进制字节文件
response = urllib.request.urlopen("http://httpbin.org/post",data=data) ## post访问时需要传递封装的参数data
print(response.read().decode("utf-8")) ## 解码输出
## 超时处理,可以设置访问超时时间timeout
try:
response = urllib.request.urlopen("http://httpbin.org/get",timeout=0.01) ## post访问时需要传递封装的参数data
print(response.read().decode("utf-8"))
except urllib.error.URLError as e:
print("timeout")
## 返回状态码
response = urllib.request.urlopen("http://httpbin.org/get")
response = urllib.request.urlopen("http://douban.com") ## 返回状态码为418:意思是“被发现你是一个爬虫”
print(response.status)
## 获取响应头信息
response = urllib.request.urlopen("http://www.baidu.com")
print(response.getheaders()) ## 获取所有的响应头信息,F12--network--Headers - response headers信息一致
Headers的最下方有user-agent信息,用于模拟浏览器
print(response.getheader("Server")) ##获取单个信息
import urllib.parse
url="http://httpbin.org/post"
data=bytes(urllib.parse.urlencode({"name":"zhangsan"}),encoding="utf-8")
headers={
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36"
}
# ## 封装请求对象,模拟浏览器
req=urllib.request.Request(url=url,data=data,headers=headers,method="POST") ## 可以将请求头信息全部封装,模拟浏览器
response=urllib.request.urlopen(req)
print(response.read().decode("utf-8"))
## 访问豆瓣,模拟浏览器,解决418问题
import urllib.parse
url="http://www.douban.com"
headers={
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36"
}
## 封装请求对象,模拟浏览器
req=urllib.request.Request(url=url,headers=headers) ## 可以将请求头信息全部封装,模拟浏览器
response=urllib.request.urlopen(req)
print(response.read().decode("utf-8"))
Xwlt补充
#-*- codeing = utf-8 -*-
#@Time : 2020/6/14 12:26
#@Author : zhangfudong
#@FILE :Xwlt.py
#@Software : PyCharm
import os
os.remove("student1.xls")
import xlwt
## 在Excel中打印乘法表
workbook = xlwt.Workbook(encoding="utf-8") ## 创建workbook对象,创建Excel
worksheet = workbook.add_sheet(‘sheet1‘) ## 创建工作表,在Excel中新建sheet1
for i in range(1,10):
for j in range(1,i+1):
worksheet.write(i-1,j-1,‘%d*%d=%d‘%(i,j,i*j)) ## 写入数据,行下标,列下标,内容,在sheet1中写入内容
j+=1
i+=1
workbook1.save(‘student1.xls‘) ## 保存Excel
12、flask+urllib+Xwlt