zoukankan      html  css  js  c++  java
  • 12、flask+urllib+Xwlt

    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
    
  • 相关阅读:
    Spring学习笔记之四----基于Annotation的Spring AOP编程
    Spring学习笔记之三----基于Annotation的Spring IOC配置
    Spring学习笔记之一----基于XML的Spring IOC配置
    Spring学习笔记之二----基于XML的Spring AOP配置
    Swift语言之类型方法
    Swift语言之命令模式(Command Pattern)实现
    用Swift语言做App开发之单元测试
    Spring Batch学习笔记三:JobRepository
    Spring Batch学习笔记二
    初探Spring Batch
  • 原文地址:https://www.cnblogs.com/moox/p/13199494.html
Copyright © 2011-2022 走看看