Code前端首页关于Code前端联系我们

Flask 快速入门:HTTP 方法

terry 2年前 (2023-09-24) 阅读数 60 #后端开发

HTTP 协议是万维网上数据通信的基础。该协议定义了从给定 URL 检索数据的各种方法。
下表总结了不同的 http 方法:
序列号 方法 说明
1 GET 以未加密的形式将数据发送到服务器。最常用的方法。
2 HEAD 与 GET 方法相同,但没有责任体。
3 POST 用于将 HTML 表单数据发送到服务器。服务器不会缓存通过 POST 方法接收的数据。
4 PUT 将目标资源的所有当前表示替换为上传的内容。
5 DELETE 删除 URL 指定的目标资源的所有当前表示形式。

默认情况下,Flask 路由响应 GET 请求。但是,可以通过将方法参数传递给 route() 装饰器来更改此首选项。
为了演示 POST 方法在 URL 路由中的使用,我们首先创建一个 HTML 表单并使用 POST 方法将表单数据发送到 URL。

login.html:

<html>
   <body>
      <form action = "http://localhost:5000/login" method = "post">
         <p>Enter Name:</p>
         <p><input type = "text" name = "nm" /></p>
         <p><input type = "submit" value = "submit" /></p>
      </form>
       {% if error %}
            <p><strong>Error</strong>: {{ error }}</p>
       {% endif %}
   </body>
</html>

mysite.py:

@app.route('/')
def index():
    '''
    Flask应用一般在templates文件夹中查找HTML文件,且templates文件夹要与运行py文件在同一层级。
    报错的原因是没有创建templates文件目录。
    '''
    return render_template("login.html")

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

@app.route('/login',methods = ['POST', 'GET'])
def login():
   error = None
   if request.method == 'POST':
      #print('POST 方法')
      #post方法,通过表单 request.form['nm'] 取值
      user = request.form['nm']
      if user == 'admin':
          return redirect(url_for('success', name=user))
      else:
          #401 - 用于未身份验证的
          abort(401)

   else:
      #print('GET 方法')
      #get方法,通过参数 request.args.get('nm') 取值
      user = request.args.get('nm')
      return redirect(url_for('success',name = user))

七、Flask模板

在前面的例子中,视图函数的主要作用是创建对请求的响应,这是最简单的请求。

1。视图函数有两个功能:

1.1。流程业务逻辑
1.2。反馈内容

2.在大型应用程序中,将业务逻辑和性能内容结合起来会增加代码复杂性和维护成本。

2.1。模板实际上是一个包含响应式文本的文件,其中为了表示动态部分,使用了封闭的标签(变量),这些标签告诉模板引擎它的具体值应该从所使用的数据中获取
2.2。使用实际值替换变量并返回最终字符串。这个过程称为“渲染”
2.3。 Flask 使用 Jinja2 模板引擎来渲染模板

3。使用模板的优点

3.1,视图函数只负责业务逻辑和数据处理(业务逻辑)
3.2,而模板则检索视图函数的数据结果进行显示(显示显示)
3.3、代码结构清晰、衔接 水平较低

4,模板基本使用

4.1,在项目下创建一个template文件夹,存放所有模板文件,并创建一个模板文件html文件hello.txt。 html
目录下的hello.html:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
  <h2>我是模板</h2>
  {{ my_int }}
  <br>
  {{ my_str }}
  <br>
  {{ my_list }}
  <br>
  {{ my_dict }}
  <hr>
  <h2>模板的list数据获取</h2>
  <hr>
  {{ my_list[0] }}
  <br>
  {{ my_list.1 }}
  <hr>
  <h2>字典数据获取</h2>
  <hr>
  {{ my_dict['name'] }}
  <br>
  {{ my_dict.age }}
  <hr>
  <h2>算术运算</h2>
  <br>
  {{ my_list.0 + 10 }}
  <br>
  {{ my_list[0] + my_list.1 }}
</body>
</html>

views.py:

@app.route('/')
def index():
    # return render_template('hello.html')

    # 往模板中传入的数据,字符串,整数,列表,字典
    my_str = 'Hello Word'
    my_int = 10
    my_list = [3, 4, 2, 1, 7, 9]
    my_dict = {
        'name': 'xiaoming',
        'age': 18
    }
    # render_template方法:渲染模板
    # 参数1: 模板名称  参数n: 传到模板里的数据
    return render_template('hello.html',
                           my_str=my_str,
                           my_int=my_int,
                           my_list=my_list,
                           my_dict=my_dict
                           )
Flask快速入门:HTTP方法

八、Flask静态文件
Web应用程序通常需要静态文件,例如javascript文件或CSS文件,以支持web的显示页。
这些文件可从您的包或模块旁边的 static 文件夹中获取,该文件夹将在您的应用程序中的 /static 中提供。
特殊的“静态”端点用于生成静态文件的 URL。

mystatic.css:

input{
    background: aquamarine;
}

mystatic.js:

//js 方法
function sayHello() {
    alert("js 方法: Hello World")
}

index.html:

<html>
   <head>
      <link rel="stylesheet" href="{{%20url_for('static',%20filename%20=%20'mystatic.css')%20}}">
      <script type = "text/javascript" src = "{{ url_for('static', filename = 'mystatic.js') }}" ></script>
   </head>   
   <body>
      <h2>静态文件:js,css 练习</h2>
      <input type = "button" onclick = "sayHello()" value = "Say Hello" />
   </body>   
</html>

views.py:

# 表单数据发送到模板演示
@app.route('/index_static')
def index_static():
    return render_template("index.html")

九、Flask Request对象
来自客户端网站的数据作为全局请求发送对象服务器。要处理请求数据,必须从 Flask 模块导入。下面列出了

Request 对象的重要属性:
Form – 它是一个字典对象,包含表单参数及其值的键值对。
args - 解析 URL 中问号 (?) 后面的查询字符串的内容。
Cookies - 包含 cookie 名称和值的字典对象。
文件 – 与上传文件相关的信息。
method - 当前请求方法。

@app.route('/login',methods = ['POST', 'GET'])
def login():
   error = None
   if request.method == 'POST':
      #print('POST 方法')
      #post方法,通过表单 request.form['nm'] 取值
      user = request.form['nm']
      if user == 'admin':
          return redirect(url_for('success', name=user))
      else:
          #401 - 用于未身份验证的
          abort(401)

   else:
      #print('GET 方法')
      #get方法,通过参数 request.args.get('nm') 取值
      user = request.args.get('nm')
      return redirect(url_for('success',name = user))

十、Flask将表单数据发送到模板
可以在URL规则中指定http方式。触发函数接收到的表单数据可以以字典对象的形式收集并传递到模板以呈现在适当的网页上。
在以下示例中,URL '/student' 使用表单呈现网页 (student.html)。
完成的数据将发布到 URL '/result',从而触发 result() 函数。
函数 result() 收集字典对象中 request.form 中存在的表单数据并将其发送到 result.html。
该模板动态呈现带有表单数据的 HTML 表格。

student.html:

<html>
   <body>
      <form action="http://localhost:5000/result" method="POST">
         <p>Name <input type = "text" name = "Name" /></p>
         <p>Physics <input type = "text" name = "Physics" /></p>
         <p>Chemistry <input type = "text" name = "chemistry" /></p>
         <p>Maths <input type ="text" name = "Mathematics" /></p>
         <p><input type = "submit" value = "submit" /></p>
    </form>
   </body>
</html>

result.html:

<html>
   <body>
     <table border = 1>
        {% for key, value in result.items() %}
        <tr>
           <th> {{ key }} </th>
           <td> {{ value }}</td>
        </tr>
        {% endfor %}
    </table>
   </body>
</html>

views.py:

@app.route('/student')
def student():
    return render_template('student.html')


@app.route('/result', methods=['POST', 'GET'])
def result():
    if request.method == 'POST':
        # form 数据 以字典对象的形式存储
        result = request.form
        return render_template("result.html", result=result)
Flask快速入门:HTTP方法Flask快速入门:HTTP方法

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门