2021-06-09-Python Flask学习笔记

Flask是什么?

在这里插入图片描述

Flask是目前十分流行的web框架,采用Python编程语言来实现相关功能。它被称为微框架(microframework),“微”并不是意味着把整个Web应用放入到一个Python文件,微框架中的“微”是指Flask旨在保持代码简洁且易于扩展,Flask框架的主要特征是核心构成比较简单,但具有很强的扩展性和兼容性,程序员可以使用Python语言快速实现一个网站或Web服务。

Flask主要包括WerkzeugJinja2两个核心函数库,它们分别负责业务处理和安全方面的功能,这些基础函数为web项目开发过程提供了丰富的基础组件。目前Python的web框架有很多。除了Flask,还有django、Web2py等等,其中Diango是目前Python的框架中使用度最高的,flask的很多模板也是模仿Diango的。

Flask的基本模式

Flask的基本模式为在程序里将一个视图函数分配给一个URL,每当用户访问这个URL时,系统就会执行给该URL分配好的视图函数,获取函数的返回值并将其显示到浏览器上,其工作过程见图 。

其中的WSGI是Web服务器和Web框架(这里是Flask)的接口,常常用于处理动态内容。Werkzeug是一个WSGI的工具包,可以作为Web框架的底层库,它已经封装好了很多内容,如图中的Request,Response,可以减轻web框架开发的工作量。

由于Flask轻量,开发应用简便,所以它扩展性极强,给用户提供了很大的选择空间。

- 支持各种关系数据库
- 支持图数据库Neo4J
- 扩展功能交由第三方开发

官方文档:Welcome to Flask — Flask Documentation (2.0.x) (palletsprojects.com)

下面开始上手吧!!

安装Flask:pip install flask

初始化一个项目:Hello.py

from flask import Flask
app = Flask(__name__)	//生成一个Flask对象
@app.route('/') //路由的作用在于给它一个url,对应分配好的视图函数
#路由的参数还可以设置成动态的
def index():	//视图函数
    return '<h1>Hello World!</h1>'

if __name__ == '__main__':
    app.run(debug=True)	//调用run启动Flask集成的开发Web服务器

运行结果
在这里插入图片描述

  1. 进阶——jinja2

    Jinja2是Python下一个被广泛应用的模板引擎。

    模板:用真值替换变量,返回响应字符串,过程即渲染【render_template】

    jinja2也有很多用法,详见Jinja2 模板用法 - 简书 (jianshu.com)
    在这里插入图片描述

    安装jinja:pip install jinja2

    项目代码:App.py

    from flask import Flask,render_template
    import cv2
    # 指定静态文件目录static,#static是固定写法,一定要用static
    app = Flask(__name__,static_url_path='/static',template_folder='templates')
    #检测人脸
    def detect(filename):
        #注意检查路径是否正确
        face_cascade = cv2.CascadeClassifier('C:/Users/zxy/Anaconda3/Lib/site-packages/cv2/data/haarcascade_frontalface_default.xml')
        img = cv2.imread(filename)
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        faces = face_cascade.detectMultiScale(gray, 1.3, 5)
    
        for (x, y, w, h) in faces:
            img = cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)
            outname='static/img/2.jpg'
            cv2.imwrite(outname,img)
        return outname
    
    @app.route('/')
    def index():
        outname=detect('static/img/1.jpg')
        return render_template('index.html',outname=outname)
        #return render_template('index.html')
    if __name__=='__main__':
        app.run(debug=True)
    

    对应的模板templates下的index.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>媒体大数据</title>
    </head>
    <body>
    <text>zxy+人脸识别</text><br>
    <!--<img src="{{url_for('static', filename='img/2.jpg')}}"/>-->
    <!--此处的filename只能写常量,且要注意前面已经指定了静态文件路径static_url_path是在static下面,不用再img前重复添加static了,"/"同样不需要-->
    <img src="{{outname}}" />
    </body>
    </html>
    

    运行结果

在这里插入图片描述

  1. 继续进阶——链接数据库mysql

    调用数据库:App.py

    import pymysql
    from flask import Flask,render_template
    @app.route('/english')	//English的路由
    def english():
        db = pymysql.connect(host="localhost",user= "root", passwd="123", database="test", charset='utf8')
        //要加上前面的参数名称
        cursor = db.cursor()	//获得游标
        try:
            sql="select * from map_enword limit 200"//SQL语句,显示前200个单词
            cursor.execute(sql)
            rs = cursor.fetchall()
            rs = list(rs)	//得到返回结果是一个list
            print(rs)
        except:
            rs = 'db-error'
            print('py-db-error')
    	db.close()
        return render_template('english.html',rs=rs)
    
    if __name__=='__main__':
        app.run()
    

    对应templates路径下的english.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>英语四六级词表</title>
    </head>
    <body>
    <h1>英语四六级词表</h1>
    <text>XXX</text>>
    <form action="/search">   //添加了按钮饰件
            <input type="text" name="wanted" value="" default="apple">
            <input type="submit" value="搜索">
    </form>
    {% for r in rs %}
    {{r}}<br>
    {% endfor %}
    </body>
    </html>
    

    结果显示:
    在这里插入图片描述

将结果可视化在这里插入图片描述

未完待续。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值