Flask初识

Flask相对于Django是一个比较微小的服务器,是一个微服务Web框架,几行代码就能建一个简单地服务,如下代码。但并不是说他不如Django,flask就相当于毛坯房,里面很多东西都需要自己去装饰,所以定制化很强。而Django相当于精修的房子,能够直接领包入户,Django是比较繁重的。

一个简单地Flask服务器:

from flask import Flask

# 创建服务
app = Flask(__name__)

# 使用装饰器配置路由,当收到该路由请求时就会执行下面的函数
# 在Flask程序中使用路由我们称之为注册路由,是使用程序实例提供的app.route()装饰器注册路由,而括号内的字符串就是url,注册路由的过程就是完成了 url和python类或函数映射的过程,可以理解为会有一张表保存了url与python类或函数的对应关系。
@app.route("/")
def main():
    return "<h1>Hello WOrld</h1>"

if __name__ == "__main__":
    # 执行服务
    app.run()

常见的请求实现

  1. GET请求

    请求的参数放在了request.args内,使用request.args.get(‘参数名’)得到参数值

    from flask import Flask, request, jsonify
    # request是请求对象,是一个全局对象
    # jsonify是将字典对象转为json的方法,使用json.dumps()同样可以
    
    app = Flask(__name__)
    
    # get请求实现
    # http://127.0.0.1:5000/get?name=hxd&age=12
    @app.route("/get", methods=['GET'])
    def get_request():
        name = request.args.get('name')
        age = request.args.get('age')
        return jsonify({"name": name, "age": age})
    
    if __name__ == "__main__":
        app.run()
    
  2. POST请求

    请求的数据放在request.from内, 使用dict(request.from)将其转为字典即可提取里面的值了

    服务端:

    from flask import Flask, request
    # request是请求对象,是一个全局对象
    # jsonify是将字典对象转为json的方法,使用json.dumps()同样可以
    
    app = Flask(__name__)
    
    # post方式实现
    @app.route("/post", methods=['POST'])
    def post_request():
        data = dict(request.form)
        values = request.values
        print(values)
        return data
    

    客户端 (爬虫):

    import requests
    import json
    
    url = "http://127.0.0.1:5000/post"
    data = {
        "name": "hxd",
        "age": "21"
    }
    
    data = requests.post(url=url, data=data).text
    print(data)
    

Flask的模板和重定向

  1. 模板(render_templates)

    前面我们返回给用户的只是一个简单地Hello World, 但是当我们需要返回跟更大的html代码就需要将html代码保存在文件里了,使用模板就是在用户请求时返回html文件

    需要在服务根目录下创建一个templates文件夹,里面存放html文件

    如:

    在templates创建一个index.html文件,并写入如下内容

    <html>
        <head>
            <title>Flask</title>
            <meta chaset="utf-8">
        </head>
        <body>
            <center>
                <h1>Flask Nb!</h1>
            </center>
        </body>
    </html>
    

    python代码

    from falsk import Flask, render_template
    app = Flask()
    
    @app.route("/", methods=["GET"])
    def mian():
        return render_template("index.html")
    
    if __name__ == "__main__"
    

    模板语言

    1. 变量

      后端:

      @app.route("/",methods=('get','post'))
      def test():
          name = "Flask"
          return render_template('index.html',name = name)
      

      前端:

      <html>
          <head>
              <title>模板语言</title>
              <meta chaset="utf-8">
          </head>
          <body>
              <h1>{{name}}, NB!</h1>
          </body>
      </html>
      
    2. 流程控制

      后端

      dic = [{"name": "Python", "rank": 2}, {"name": "Java", "rank": 3}, {"name": "C", "rank": 1}]
      
      @app.route("/rank")
      def rank():
          return render_template("rank.html", dic=dic)
      

      前端 :

      <html>
          <head>
              <title>模板语言</title>
              <meta chaset="utf-8">
          </head>
          <body>
              <table>
                  <tr>
                      <th>语言</th>
                      <th>排行</th>
                  </tr>
                  {% for name, rank in dic.items() %}
                  <tr>
                      <td>{{name}}</td>
                      <td>{{rank}}</td>
                  </tr>
                  {% endif %}
                  //
              </table>
          </body>
      </html>
      

      在for循环内你可以访问这些变量:

      • loop.index 当前循环迭代的次数(从 1 开始)
      • loop.index0 当前循环迭代的次数(从 0 开始)
      • loop.revindex 到循环结束需要迭代的次数(从 1 开始)
      • loop.revindex0 到循环结束需要迭代的次数(从 0 开始)
      • loop.first 如果是第一次迭代,为 True
      • loop.last 如果是最后一次迭代,为 True)
      • loop.length 序列中的项目数
      • loop.cycle 在一串序列间期取值的辅助函数
    3. if判断

      {% if dic[1].name == python %}
         <h2>第一个语言是python</h2>
      {% elif dic[1].rank == 1 %}
         <h2>第一个显示的语言排名是第一名</h2>
      {% else %}
         <h2>第一个显示的语言既不是python,也不排第一</h2>
      {% endif %}
      
    4. 防止xss攻击

      Flask有防止xss攻击的措施,所以你传递的参数如果是html代码就不会正常显示,所以需要做以下措施

      后端:

      from flask import Markup  # 导入 flask 中的 Markup 模块
      tag = Markup('<h1>伟大诞生自平凡</h1>') # 然后再讲tag作为参数传递给前端使用
      

      前端:

      {{tag | safe}}  # 加上管道符 |safe
      
  2. 重定向(redirect)

    可以将一个路由重定向到另一个路由,比如我们在登录时,输入的密码错误,这是服务器应该重定向到登录界面,但输入的密码正确,我们就重定向到个人首页。

    from falsk import Flask, redirect
    app = Flask()
    
    @app.route("/", methods=["GET"])
    def mian():
        return redirect("http://www.baidu.com")
    
    if __name__ == "__main__"
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值