12、flask+urllib+Xwlt

2021-01-29 21:15

阅读:482

YPE html>

标签:item   jinja2   处理   信息   i+1   except   timeout   python   flask框架   

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/")           ## 浏览器传参,为接收传参变量,http://127.0.0.1:5000/usr/zhangfd
def welcome(name):                  ## 将传入的参数作为函数的参数
    return "welcome,%s"%name       ## 函数参数调用

## 通过访问路径,获取用户的整形参数,        此外,还有float类型
@app.route("/usr/")         ## 路由路径不能重复,用户通过唯一路径访问特定的函数
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



Title
    今天是{{ var }},欢迎光临
今天值班的有:
{% for data in list %}
  • {{ data }}
  • {% endfor %} 任务:
    {% for key,value in task.items() %} {% endfor %}
    {{ key }} {{ value }}

    3.register.html

    
    
    
    
    Title
    

    姓名:

    年龄:

    性别:

    地址:

    4.result.html

    
    
    
    
    Title
    
            {% for key,value in result.items() %}     
            {% endfor %}
        
    {{ key }} {{ value }}

    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

    标签:item   jinja2   处理   信息   i+1   except   timeout   python   flask框架   

    原文地址:https://www.cnblogs.com/moox/p/13199494.html


    评论


    亲,登录后才可以留言!