python 框架之 flask

1 环境搭建

以下是python3配置虚拟化环境的步骤
1 配置虚拟化环境
(1)mac/linux
$ mkdir myproject
$ cd myproject
$ python3 -m venv venv
(2)windows
> mkdir myproject
> cd myproject
> py -3 -m venv venv

2 激活虚拟化环境
(1)mac/Linux
$ . venv/bin/activate
(2)window
> venv\Scripts\activate
进入虚拟化环境的标志
在这里插入图片描述
退出虚拟化环境
mac/Linux
$ deactivate
在这里插入图片描述
3 安装flask
pip3 install flask
4 配置虚拟化环境的好处
虚拟环境可以为每一个项目安装独立的 Python 库,这样就可以隔离不同项目之 间的 Python 库,也可以隔离项目与操作系统之间的 Python 库。

2 简单的hello world 程序

保存到hello.py 中

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello World'

if __name__ == '__main__':
	app.debug = True
    app.run()

3 主体说明

在项目中导入Flask模块是强制性的。 Flask类的一个对象是WSGI应用程序。
Flask构造函数将当前模块的名称(name)作为参数。
Flask类的route()函数是一个装饰器,它告诉应用程序哪个URL应该调用相关的函数。
app.route(rule, options)
rule 参数表示与该函数绑定的URL。
options 是要转发给底层Rule对象的参数列表。
在上面的例子中,’/’ URL与hello_world()方法绑定。 因此,在浏览器中打开Web服务器的主页时,将呈现此函数的输出。
Flask类的run()方法在本地开发服务器上运行应用程序。
在这里插入图片描述
启动程序 python3 hello.py
调试模式
Flask应用程序通过调用run()方法来启动。 但是,当应用程序正在开发中时,应该为代码中的每个更改手动重新启动它。 为了避免这种不便,可以启用调试支持。 如果代码改变,服务器将自动重新加载。 它还将提供一个有用的调试器来跟踪应用程序中的错误(如果有的话)。
在运行或将调试参数传递给run()方法之前,通过将应用程序对象的调试属性设置为True来启用调试模式。
app.debug = True 热加载
app.run()
app.run(debug = True) 热加载

4 flask 路由

现代Web框架使用路由技术来帮助用户记住应用程序URL。 无需从主页导航即可直接访问所需页面。
Flask中的route()装饰器用于将URL绑定到函数。 例如 -

@app.route('/hello')
def hello_world():
    return 'hello world'

这里,URL /hello规则绑定到hello_world()函数。 因此,如果用户访问URL : http://localhost:5000/hello ,就会调用hello_world()函数,这个函数中的执行的结果输出将在浏览器中呈现。
应用程序对象的add_url_rule()函数也可用于将URL与函数绑定,如上例所示,使用route()。

def hello_world():
    return 'hello world'

app.add_url_rule('/', 'hello', hello_world)

5 Flask 变量规则

这个变量部分被标记为。 它作为关键字参数传递给规则所关联的函数。
variable 可以省略
实例 :variable 可以省略

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,port=8090)

在这里插入图片描述
构造int 参数

from flask import Flask

app = Flask(__name__)

@app.route('/hello/<int:score>')
def hello_name(score):
    return '您的成绩: %s!' % score


if __name__ == '__main__':
    app.run(debug=True,port=8090)

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

from flask import Flask
app = Flask(__name__)

@app.route('/flask')
def hello_flask():
    return 'Hello Flask'

@app.route('/python/')
def hello_python():
    return 'Hello Python'

if __name__ == '__main__':
    app.run()

两条规则看起来都很相似,但在第二条规则中,使用了尾部斜线(/)。 因此,它变成了一个规范的URL。 因此,使用/python或/python/返回相同的输出。 但是,在第一条规则的情况下, URL:/flask/会导致404 Not Found页面。

6 Flask URL构建

from flask import Flask, redirect, url_for

app = Flask(__name__)

@app.route('/admin')
def hello_admin():
    return 'Hello Admin'

@app.route('/guest/<guest>')
def hello_guest(guest):
    return 'Hello %s as Guest' % guest

@app.route('/user/<name>')
def user(name):
    if name =='admin':
        return redirect(url_for('hello_admin'))
    else:
        return redirect(url_for('hello_guest',guest = name))

if __name__ == '__main__':
    app.run(debug=True,port=8090)

上面的脚本有一个函数用户(名称),它接受来自URL的参数值。
User()函数检查收到的参数是否与’admin’匹配。 如果匹配,则使用url_for()将应用程序重定向到hello_admin()函数,否则将该接收的参数作为guest参数传递给hello_guest()函数。
redirect :重定向的关键字
url_for :指定返回的函数

7 Flask HTTP方法

在这里插入图片描述
默认情况下,Flask路由响应GET请求。 但是,可以通过为route()装饰器提供方法参数来更改此首选项。

下面演示post请求

from flask import Flask, redirect, url_for, request

app = Flask(__name__)

@app.route('/success/<name>')
def success(name):
    return 'welcome %s' % name

@app.route('/login',methods = ['POST', 'GET'])
def login():
    if request.method == 'POST':
        user = request.form['name']
        return redirect(url_for('success',name = user))
    else:
        user = request.args.get('name')
        return redirect(url_for('success',name = user))


if __name__ == '__main__':
    app.run(debug=True,port=8090)

使用postman 验证
在这里插入图片描述
get请求验证
在这里插入图片描述

8 Flask 模板

可以利用Jinja2模板引擎技术,而不需要从函数返回硬编码HTML。如下代码所示,可以通过render_template()函数渲染HTML文件。
flask将尝试在该脚本所在的同一文件夹中查找templates文件夹中的HTML文件。
实例

from flask import Flask, render_template
app = Flask(__name__)

@app.route('/hello/<user>')
def hello_name(user):
    return render_template('hello.html', name = user)

if __name__ == '__main__':
    app.run(debug = True)

在这里插入图片描述

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Flask HTTP请求方法处理</title>
</head>
   <body>

      <h1>Hello {{ name }}!</h1>

   </body>
</html>

Jinja2模板引擎使用以下分隔符来从HTML转义。
{% … %} 用于多行语句
{{ … }} 用于将表达式打印输出到模板
{# … #} 用于未包含在模板输出中的注释
【 # … ## 用于单行语句 】

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Flask模板示例</title>
</head>
   <body>

      {% if marks>50 %}
      <h1> 通过考试!</h1>
      {% else %}
      <h1>未通过考试!</h1>
      {% endif %}

   </body>
</html>

请注意,条件语句if-else和endif包含在分隔符{%…。%}中。

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Flask模板示例</title>
</head>
   <body>
      <table border = 1>
         {% for key, value in result.items() %}
            <tr>
               <th> {{ key }} </th>
               <td> {{ value }} </td>
            </tr>
         {% endfor %}
      </table>
   </body>
</html>

在这里,与For循环相对应的Python语句包含在{%…%}中,而表达式键和值放在{{}}中

9 Flask 静态文件

在工作目录创建一个static 文件夹 ,在static下存放静态文件,.js .css 文件等
在这里插入图片描述
实例:

<html>
   <head>
      <script type = "text/javascript"
         src = "{{ url_for('static', filename = 'hello.js') }}" ></script>
   </head>
   <body>
      <input type = "button" onclick = "sayHello()" value = "Say Hello" />
   </body>
</html>
from flask import Flask, render_template

app = Flask(__name__)

@app.route("/")
def index():
    return render_template("index.html")


if __name__ == '__main__':
    app.run(debug=True,port=8090)

hello.js 文件

function sayHello() {
   alert("Hello World")
}

在这里插入图片描述

10 Flask 请求对象

在这里插入图片描述

11 Flask 表单处理

我们已经看到,可以在URL规则中指定http方法。URL映射的函数接收到的表单数据可以以字典对象的形式收集,并将其转发给模板以在相应的网页上呈现它。
在以下示例中,URL => / 呈现具有表单的网页(student.html)。填充的数据会提交到触发result()函数的URL => /result 中。
results()函数收集字典对象中request.form中存在的表单数据,并将其发送给result.html 并显示出来。
该模板动态呈现表单数据的HTML表格。
下面给出的是Python的应用程序代码 -

from flask import Flask, render_template, request

app = Flask(__name__)

@app.route('/result',methods = ['POST', 'GET'])
def result():
    if request.method == 'POST':
        result = request.form
        return result

if __name__ == '__main__':
    app.run(debug=True,port=8090)

result 返回到前端是 json 对象
form.to_dict() 接收数据并转换成python的 dict
form.get(key) 通过key 找 value

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值