《Python入门+Python爬虫》——6Day 数据库可视化——Flask框架应用

Python学习版本: Python 3.X
观看:Python入门+Python爬虫+Python数据分析
请添加图片描述

1.Flask入门

1.1 关于Flask

1.1.1 了解框架

Flask作为Web框架,它的作用主要是为了开发Web应用程序。那么我们首先来了解下Web应用程序。Web应用程序 (World Wide Web)诞生最初的目的,是为了利用互联网交流工作文档。
在这里插入图片描述
一切从客户端发起请求开始。

  • 所有Flask程序都必须创建一个程序实例。
  • 当客户端想要获取资源时,一般会通过浏览器发起HTTP请求。
  • 此时,Web服务器使用一种名为WEB服务器网关接口的WSGI(Web Server Gateway Interface)协议,把来自客户端的请求都交给Flask程序实例。
  • Flask使用Werkzeug来做路由分发(URL请求和视图函数之间的对应关系)。根据每个URL请求,找到具体的视图函数。
  • 在Flask程序中,路由一般是通过程序实例的装饰器实现。通过调用视图函数,获取到数据后,把数据传入HTML模板文件中,模板引擎负责渲染HTTP响应数据,然后由Flask返回响应数据给浏览器,最后浏览器显示返回的结果。

为什么要用Web框架?
web网站发展至今,特别是服务器端,涉及到的知识、内容,非常广泛。这对程序员的要求会越来越高。如果采用成熟,稳健的框架,那么一些基础的工作,比如,网络操作、数据库访问、会话管理等都可以让框架来处理,那么程序开发人员可以把精力放在具体的业务逻辑上面。使用Web框架开发Web应用程序可以降低开发难度,提高开发效率。

Flask框架的诞生:
Flask诞生于2010年,是Armin ronacher(人名)用Python语言基于Werkzeug工具箱编写的轻量级Web开发框架。它主要面向需求简单的小应用。

Flask本身相当于一个内核,其他几乎所有的功能都要用到扩展(邮件扩展Flask-Mail,用户认证FlaskLogin),都需要用第三方的扩展来实现。比如可以用Flask-extension加入ORM、窗体验证工具,文件上传、身份验证等。Flask没有默认使用的数据库,你可以选择MySQL,也可以用NoSQL。其 WSGI 工具箱采用 Werkzeug(路由模块) ,模板引擎则使用 Jinja2 。

可以说Flask框架的核心就是Werkzeug和Jinja2。

Python最出名的框架要数Django,此外还有Flask、Tornado等框架。虽然Flask不是最出名的框架,但是Flask应该算是最灵活的框架之一,这也是Flask受到广大开发者喜爱的原因。

Flask扩展包:

  • Flask-SQLalchemy:操作数据库;
  • Flask-migrate:管理迁移数据库;
  • Flask-Mail:邮件;
  • Flask-WTF:表单;
  • Flask-script:插入脚本;
  • Flask-Login:认证用户状态;
  • Flask-RESTful:开发REST API的工具;
  • Flask-Bootstrap:集成前端Twitter Bootstrap框架;
  • Flask-Moment:本地化日期和时间;

1.2 视图

Flask程序运行过程:
所有Flask程序必须有一个程序实例。

Flask调用视图函数后,会将视图函数的返回值作为响应的内容,返回给客户端。一般情况下,响应内容主要是字符串和状态码。

当客户端想要获取资源时,一般会通过浏览器发起HTTP请求。此时,Web服务器使用WSGI(WebServer Gateway Interface)协议,把来自客户端的所有请求都交给Flask程序实例。WSGI是为 Python语言定义的Web服务器和Web应用程序之间的一种简单而通用的接口,它封装了接受HTTP请求、解析HTTP请求、发送HTTP,响应等等的这些底层的代码和操作,使开发者可以高效的编写Web应用。

程序实例使用Werkzeug来做路由分发(URL请求和视图函数之间的对应关系)。根据每个URL请求,找到具体的视图函数。 在Flask程序中,路由的实现一般是通过程序实例的route装饰器实现。route装饰器内部会调用add_url_route()方法实现路由注册。

调用视图函数,获取响应数据后,把数据传入HTML模板文件中,模板引擎负责渲染响应数据,然后由Flask返回响应数据给浏览器,最后浏览器处理返回的结果显示给客户端。

1.2.1 从Helloworld开始
# 导入Flask类
from flask import Flask
#Flask类接收一个参数__name__
app = Flask(__name__)
# 装饰器的作用是将路由映射到视图函数index
@app.route('/')
def index():
	return 'Hello World'
# Flask应用程序实例的run方法启动WEB服务器
if __name__ == '__main__':
	app.run()
1.2.2 开启调试模式

Debug模式的开启,可以更好的定位错误,还可以既是刷新修改的页面,不用重启服务器。

app.run(debug=True) #Pycharm中不起作用

在运行的环境配置中,勾选Flask Debug
在这里插入图片描述

1.2.3 给路由传参示例:

有时我们需要将同一类URL映射到同一个视图函数处理,比如:使用同一个视图函数 来显示不同用户的个人信息。

通过向规则参数添加变量部分,可以动态构建URL。此变量部分标记为。它作为关键字参数传递给与规则相关联的函数。

from flask import Flask
app = Flask(__name__)
@app.route('/hello/<name>')
def hello_name(name):
	return 'Hello %s!' % name
	
if __name__ == '__main__':
	app.run(debug = True)
# 路由传递的参数默认当做string处理,这里指定int,尖括号中冒号后面的内容是动态的
@app.route('/user/<int:id>')
def hello_itcast(id):
	return 'hello ,welcome user %d' %id

除了默认字符串变量部分之外,还可以使用以下转换器构建规则:
转换器和描述

  1. int接受整数
  2. float对于浮点值
  3. path 接受用作目录分隔符的斜杠
@app.route('/test/') #/test 和上面/user不同,相同的/user后面可以接不同的类型
def test(name):
	return 'welcome'

1.3 Flask应用

视图函数的主要作用是生成请求的响应,这是最简单的请求。实际上,视图函数有两个作用:处理业务逻辑和返回响应内容。在大型应用中,把业务逻辑和表现内容放在一起,会增加代码的复杂度和维护成本。本节学到的模板,它的作用即是承担视图函数的另一个作用,即返回响应内容。 模板其实是一个包含响应文本的文件,其中用占位符(变量)表示动态部分,告诉模板引擎其具体值需要从使用的数据中获取。使用真实值替换变量,再返回最终得到的字符串,这个过程称为“渲染”。Flask使用Jinja2这个模板引擎来渲染模板。Jinja2能识别所有类型的变量,包括{}。 Jinja2模板引擎,Flask提供的render_template函数封装了该模板引擎,render_template函数的第一个参数是模板的文件名,后面的参数都是键值对,表示模板中变量对应的真实值。
Jinja2官方文档(http://docs.jinkan.org/docs/jinja2/

用例
from flask import Flask,render_template
import datetime
app = Flask(__name__)
#返回给用户渲染后的网页文件
@app.route('/<int:id>')
def index2(id):
    time= datetime.date.today()#普通变量
    name =["aaa","bbb","狂鼠"]
    task={"任务":"打扫卫生","时间":"3小时" }
    return render_template('index.html',var = time,list =name,id = id,task =task)
    
if __name__ == '__main__':
  app.run()
<body>
{{ var }}
{% for data in list %}
    {{ data }}
{% endfor %}

{{ id }}
<br/>
任务:
<table border="1">
    {% for key,value in task.items() %}
    <tr>
        <td>{{ key }}</td>
        <td>{{ value }}</td>
    </tr>
    {% endfor %}
</table>
</body>
</html>

打印结果
在这里插入图片描述

1.3.1 路由、表单提交、变量

反向路由:
Flask提供了url_for()辅助函数,可以使用程序URL映射中保存的信息生成URL;url_for()接收视图函数名作为参数,返回对应的URL;
如调用url_for(‘index’,_external=True)返回的是绝对地址,在下面这个示例中是http://127.0.0.1:5000/index。

@app.route('/index')
def index():
	return render_template('index.html')
@app.route('/user/')
def redirect():
	return url_for('index',_external=True)

url_for()**函数对于动态构建特定函数的URL非常有用。该函数接受函数的名称作为第一个参数,以及一个或多个关键字参数,每个参数对应于URL的变量部分。
以下脚本演示了如何使用url_for()函数,以及提交表单:

from flask import Flask,render_template,request
#request 将用户的请求的信息封装好了
import datetime
app = Flask(__name__)
#表单提交
@app.route('/test/register')
def register():
    return render_template('test/register.html')
    
#接收表单提交的路由,需要指定methods为post
@app.route('/result',methods=['POST','GET'])
def result():
    if request.method=='POST':
        # 将表单的数据封装成字典 传给result
        result=request.form
        #如果是post这样返回
        return render_template('test/result.html',result= result)
if __name__ == '__main__':
    app.run()

--register.html
<body>
url_for()函数只填写路由名字   动态访问 不用加'/' 动态获取网址根路径
<form action='{{ url_for('result') }}'method='post'>
    <p> 姓名 <input type="text" name="name"></p>
    <p> 学号 <input type="text" name="id"></p>
    <p> 年龄 <input type="text" name="age"></p>
    <p> 地址 <input type="text" name="address"></p>
    <p>  <input type="submit" value="提交"> </p>
</form>
</body>
</html>
--result.html接收表单
<body>
result
<table>
    <th>
        <tr></tr>
    </th>
  <table border="1">
    {% for key,value in result.items() %}
    <tr>
        <th>{{ key }}</th>
        <td>{{ value }}</td>
    </tr>
    {% endfor %}
</table>
</table>
</body>

在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值