整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

Flask HTTP方法

Flask HTTP方法

ttp协议是万维网数据通信的基础。 它协议定义了从指定URL中检索不同数据的方法。

下表概括了不同的http方法 -

编号

方法

描述

1

GET

将数据以未加密的形式发送到服务器,这最常用的方法。

2

HEAD

与GET相同,但没有响应主体

3

POST

用于将HTML表单数据发送到服务器。通过POST方法接收的数据不会被服务器缓存。

4

PUT

用上传的内容替换目标资源的所有当前表示。

5

DELETE

删除由URL给出的所有目标资源的所有表示

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

为了演示在URL路由中使用POST方法,首先创建一个HTML表单并使用POST方法将表单数据发送到URL。

将以下脚本保存到文件:login.html

# Filename : example.py
# Copyright : 2020 By Nhooo
# Author by : www.cainiaojc.com
# Date : 2020-08-08
<html>
 <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
     <title>Flask HTTP请求方法处理</title>
 </head>
    <body>
       <form action="http://localhost:5000/login" method="post">
          <p>输入姓名:</p>
          <p><input type="text" name="name" value=""/></p>
          <p><input type="submit" value="提交" /></p>
       </form>
    </body>
 </html>

现在在Python shell中输入以下脚本。

示例

# Filename : example.py
# Copyright : 2020 By Nhooo
# Author by : www.cainiaojc.com
# Date : 2020-08-08
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)

开发服务器开始运行后,在浏览器中打开login.html,在文本字段中输入名称(如: maxsu )并单击 提交

表单数据被提交到<form>标签的action属性指定的URL。

http://localhost:5000/login被映射到login()函数。 由于服务器已通过POST方法接收数据,因此从表单数据获得'name'参数的值,通过以下方式-

# Filename : example.py
# Copyright : 2020 By Nhooo
# Author by : www.cainiaojc.com
# Date : 2020-08-08
user=request.form['name']

它作为可变部分传递给URL:/success。 浏览器在窗口中显示欢迎消息。

将login.html中的方法参数更改为GET并在浏览器中再次打开。 在服务器上收到的数据是通过GET方法。 'name'参数的值现在通过以下方式获得 -

# Filename : example.py
# Copyright : 2020 By Nhooo
# Author by : www.cainiaojc.com
# Date : 2020-08-08
User=request.args.get('name')

这里,args是字典对象,它包含一系列表单参数及其对应值。 与之前一样,与'name'参数对应的值将传递到URL:/success。

叫骆驼

会点儿代码,会点儿读书

这世上的书浩如烟海

我能做的就是尽量整理分享给你

上一个小节Flask项目第一弹中,我们创建了第一个 Flask 程序,并且在浏览器中成功看到了 Flask 程序给我们返回的 Hello World。

但是你有没有注意到,我们看到的内容只是在后台进行写死的,也就是说无论你怎么请求,看到的永远是 Hello World,有没有办法根据自己的需求让 Flask 程序返回给你想要的内容?

答案肯定是有的。想想计算机网络中的HTTP 协议,它提供了多种方法访问服务端资源。本小节讲解常用的 HTTP 方法。并通过一个具体的例子,说明如何在 Flask 中使用不同的 HTTP 方法。

HTTP协议

HTTP 协议是 Hyper Text Transfer Protocol(超文本传输协议)的缩写, 用于从万维网(World Wide Web)服务器传输超文本到本地浏览器的传送协议。

HTTP 协议工作于客户端-服务端架构为上。浏览器作为 HTTP 客户端通过 URL 向 服务端发送请求,服务端根据接收到的请求 URL,向客户端发送响应信息。HTTP 请求-响应模型如下所示:

HTTP请求-响应模型图

如果再细致一点儿,那就是这样:

HTTP请求响应模型图in版

HTTP请求消息(请求头、请求行、请求体)

随便找一个界面,然后点开 F12 ,点击网络,查看资源:

请求

HTTP 协议是一个简单的请求-响应协议,它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。

如下,是一个 HTTP 请求消息的例子

GET / HTTP/1.1
Host: www.baidu.com
Connection: keep-alive
User-Agent: Mozilla/5.0 AppleWebKit/537.36 Chrome/81.0
Accept: text/html,application/xml;image/webp,image/png,*/*;
...
省略
...

第一行是请求行,用来说明请求方法,要访问的资源,以及所使用的 HTTP 版本。此例中,请求方法是 GET,要访问的资源是 /,HTTP 版本是 1.1,表示要获取网站首页 / 的内容。

请求行之后的部分是请求头,用作说明服务器要使用的附加信息。例如:Host 指出请求的主机名: www.baidu.com。

请求头部之后是请求体,在请求体中可以添加任意的其他数据,此例请求体为空(省略部分)。

HTTP常规方法以及对应 Flask 应用

HTTP方法之Flask

下面我们通过一个具体的例子,说明如何在 Flask 中使用不同的 HTTP 方法:

首先,导入类 flask.Flask 和 flask.request,request 封装了请求消息,可以获取请求的各种参数。

from flask import Flask, request

app=Flask(__name__)

定义处理路径 /login 的函数 login,装饰器 @app.route(’/login’, methods=[‘GET’]) 表示使用 GET 方法处理路径 /login 的请求。

@app.route('/login', methods=['GET'])
def login():
    return (
        '''
        <form action="/check_login" method="POST">
            <span><input type="text" name="name"/></span>
            <span><input type="password" name="password"/></span>
            <button type="submit">提交</button>
        </form>
        '''
    )

注意:Flask 可以识别路由函数返回的 HTML 语法,但是需要包裹在 """ """ 中。

函数 login 返回一段用于登录的 HTML 表单,表单包括 2 个字段: name 和 password。在第 5 行,指定使用 POST 方法提交表单给服务端的 /check_login 处理函数。

定义处理路径 /check_login 的函数 check_login,装饰器 @app.route(’/check_login’, methods=[‘POST’]) 表示使用 POST 方法处理路径 /check_login 的请求。

函数 check_login 根据请求的参数 name 和 password 是否正确,返回给用户相应的信息。在第 3 行,提取参数 name 的值,在第 4 行,提取参数 password 的值。如果 name 是 admin,password 是 1234,则返回 Login Succeed 消息,否则返回Login Failed 消息。

@app.route('/check_login', methods=['POST'])
def check_login():
    name=request.form['name']
    password=request.form['password']
    if name=='admin' and password=='1234':
        return 'Login Succeed'
    else:
        return 'Login Failed'

运行配置

还记得如何运行吗?

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

load_dotenv 是配合我们的配置文件运行的,如果忘记了配置文件长什么样子,那么可以看看Flask项目实战第一弹。

打开 cmd ,运行如下:

(flask) D:\01-code\python\pythonProject>flask run 
 * Serving Flask app 'manage' (lazy loading)
 * Environment: development
 * Debug mode: on          
 * Restarting with stat    
 * Debugger is active!
 * Debugger PIN: 438-008-053
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

调试运行

用户在浏览器中输入 http://localhost:5000/login,浏览器显示:

login

此时输入 admin、1234 ,则返回的 URL 与服务器资源如下:

succeed

如果账户和密码不是这两个 value ,则会看到服务器给你返回的结果是这样的:

failed

到此,基础的 HTTP 协议和方法 以及 Flask 对应的使用已经讲完了,恭喜你,又进一步![玫瑰]

对于登录这个功能来说,如果业务逻辑只是这样处理,那太太太简单了。你瞅瞅应该做的(下图只考虑功能逻辑)

登录功能需求分析

我们不可能自己造轮子,为了满足需求,是不是有现有的轮子让我们用呢?答案是肯定有的。不过这里先不做过多介绍,后面我们慢慢来,慢就是快。这一块儿需求今天先存档。

我整理了自学 Python 的视频,涉及到 爬虫、Web、数据分析、机器学习和深度学习等内容,留言转发并后台发送:“你好,Python”,就可以免费获取啦![比心]

爬虫

我也是从大学一路自学走来的,深知自学的情况下,没有项目是多么的难受。现在免费赠送python项目实战,后台私聊即可获得。[比心]

最后,动动手点个赞,您的支持是我创作的最大动力[碰拳]

言:

Flask 是一个简单而灵活的 Python Web 开发框架。它被设计成易于使用,并且能够快速开发 Web 应用程序。Flask 提供了一个简洁的核心,并以扩展的方式提供了许多功能。作为一个微型框架,Flask 提供了最基本的功能,可以使用插件或扩展来添加更多的功能,以满足开发者的需求。

Flask 的主要特点包括:

  1. 简洁:

Flask 以简洁为设计理念,核心只包含了最基本的功能,不对开发者进行限制,方便开发者进行自定义扩展。

  1. 易于学习:

Flask 的 API 设计简单明了,没有过多的概念和复杂的配置。开发者可以很快上手,快速开发出功能完备的 Web 应用。

  1. 轻量级:

Flask 将复杂的任务分解为简单的组件,并通过插件系统进行扩展。它没有强制性的依赖,只需要安装 Flask 就可以开始开发。

  1. RESTful 支持:

Flask 对创建 RESTful API 提供了强大的支持,可以轻松地构建符合 RESTful 架构风格的 Web 服务。

下面我们通过一个简单的示例来演示 Flask 的使用。

首先,我们需要安装 Flask,可以使用以下命令通过 pip 进行安装:

pip install flask


接下来,我们创建一个 app.py 文件并在其中编写以下代码:

from flask import Flask

app=Flask(__name__)

@app.route('/')
def hello():
    return 'Hello, World!'

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

在上面的代码中,我们导入了 Flask 模块并创建了一个 Flask 应用。@app.route('/') 是一个装饰器,用于定义 URL 路由。当用户访问根路径时,会执行 hello() 函数,并返回 ‘Hello, World!’。

最后,我们可以在命令行中运行以下命令启动应用:

python app.py

运行后,你将看到类似以下的输出:

 * Running on http://localhost:5000/ (Press CTRL+C to quit)

现在,你可以在浏览器中访问 http://localhost:5000/,就能看到页面显示 ‘Hello, World!’。


当使用 Flask 进行 Web 开发时,你将会涉及到很多常用的功能和技术,下面我将介绍一些常见的 Flask 功能和实例代码。

  1. 路由和视图函数

在 Flask 中,使用路由来定义 URL 和相应的视图函数。路由是通过装饰器 @app.route() 来创建的。
下面是一个接收 URL 参数的示例:

@app.route('/user/<username>')
def show_user(username):
    return f"Hello, {username}!"
  1. 请求和响应

Flask 提供了方便的用于处理请求和响应的功能。通过 request 对象可以获取请求的信息,通过 make_response() 函数可以创建响应对象。

下面是一个获取请求参数并返回响应的示例:

from flask import request

@app.route('/hello')
def hello():
    name=request.args.get('name', 'Anonymous')
    return f"Hello, {name}!"
  1. 模板渲染

使用模板引擎可以将动态数据渲染到 HTML 页面中。Flask 默认支持 Jinja2 模板引擎。

下面是一个使用模板引擎的示例:

from flask import render_template

@app.route('/')
def index():
    return render_template('index.html', title='Home')

在上面的示例中,index.html 是一个模板文件,可以包含动态的数据和逻辑。

  1. 表单处理

Flask 提供了 Flask-WTF 扩展来处理 Web 表单。它能够方便地实现表单验证和数据处理。

下面是一个使用 Flask-WTF 处理表单的示例:

from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
from wtforms.validators import DataRequired

class MyForm(FlaskForm):
    name=StringField('Name', validators=[DataRequired()])
    submit=SubmitField('Submit')

@app.route('/form', methods=['GET', 'POST'])
def form():
    form=MyForm()
    if form.validate_on_submit():
        name=form.name.data
        return f"Hello, {name}!"
    return render_template('form.html', form=form)

在上面的示例中,我们定义了一个表单类 MyForm,其中包含一个文本字段和一个提交按钮。当表单被提交时,表单数据会被验证,并通过 form.validate_on_submit() 方法进行判断。

  1. 数据库集成

Flask 可以与各种数据库进行集成,常用的有 SQLite、MySQL、PostgreSQL 等。通过使用 Flask 的扩展,如 Flask-SQLAlchemy 或 Flask-MySQLdb,可以轻松地进行数据库操作。

下面是一个使用 Flask-SQLAlchemy 进行数据库操作的示例:

from flask_sqlalchemy import SQLAlchemy

app.config['SQLALCHEMY_DATABASE_URI']='sqlite:///mydatabase.db'
db=SQLAlchemy(app)

class User(db.Model):
    id=db.Column(db.Integer, primary_key=True)
    username=db.Column(db.String(50), nullable=False)

@app.route('/users')
def users():
    users=User.query.all()
    return render_template('users.html', users=users)

在上面的示例中,我们定义了一个 User 模型类,并使用 SQLAlchemy 来进行数据库操作。users() 函数查询所有用户,并将结果传递给模板进行渲染。

这只是一小部分 Flask 的功能和示例,Flask 还提供了许多其他功能和扩展,如用户认证、API 开发、错误处理等。你可以根据自己的需求选择合适的扩展,以及查阅 Flask 的官方文档和社区资源,进一步学习和深入了解 Flask 的用法和特性。


总结一下,Flask 是一个灵活、易学的 Python Web 开发框架,通过使用路由、视图函数、请求和响应、模板渲染、表单处理、数据库集成等功能,可以快速地构建出功能丰富的 Web 应用程序。无论是初学者还是专业开发者,Flask 都是一个值得学习的。