zoukankan      html  css  js  c++  java
  • 🍖Flask四剑客及简单使用

    一.Flask 的使用

    1.简单使用

    • 展示 "hello word"
    from flask import Flask
    
    app = Flask(__name__)
    
    @app.route('/')
    def index():
        return '<h1>Hello Word!</h1>'
    
    if __name__ == '__main__':
        # flask默认的端口是5000
        app.run()  # 本质还是调用了run_simple()方法:(源码)run_simple(host, port, self, **options)
    
    • 效果

    image-20210602211241913

    • 方法及参数分析
    from flask import Flask  # 导入Flask类
    
    app = Flask(__name__)
    """
    Flask内参数:
    import_name : Flask程序所在的包(模块),传 __name__ 就可以,用来决定Flask在访问静态文件时查找的路径
    static_path : 静态文件访问路径(不推荐使用,使用 static_url_path 代替)
    static_url_path : 静态文件访问路径,可以不传,默认为:/ + static_folder
    static_folder : 静态文件存储的文件夹,可以不传,默认为 static
    template_folder : 模板文件存储的文件夹,可以不传,默认为 templates
    """
    
    @app.route('/')
    def index():
        return '<h1>Hello Word!</h1>'
    """
    flask的路由是通过给视图添加装饰器的方式进行编写的。当然也可以分离到另一个文件中
    flask的视图函数,flask中默认允许通过return返回html格式数据给客户端
    """
    
    if __name__ == '__main__':
        # 运行flask,指定ip和port(默认是本机,5000端口)
        app.run(host="0.0.0.0", port=5000)
    

    二.Flask 四剑客、jinja2、request、登入入示例

    1.Falsk 三剑客

    • request : 类比Django中 HttpResponse (HTTP请求)
    • render_template : 类比Django中 render (渲染)
    • redirect : 类比Django中 redirect (重定向)
    • jsonify : 类比Django中 JsonResponse(返回json格式数据)

    2.jinja2 模板语法

    • 与Django的DTL类似,但是比DTL强大,支持加括号执行,字典支持中括号取值和get取值

    3.请求数据的存放的位置

    • get 请求 : request.query_string.get('xxx')
    • post 请求 : request.form.get('xxx')

    3.登入示例

    • run.py
    from flask import Flask, render_template, request, redirect
    
    app = Flask(__name__)
    app.debug = True
    """
    开发阶段,设置debug模式
    会在页面中显示错误信息
    可以在修改代码之后自动重启服务
    """
    
    # 用户信息
    USERS = {
        1: {'name': '派大星', 'age': 18, 'gender': '男', 'info': "星星星星星"},
        2: {'name': '海绵宝宝', 'age': 28, 'gender': '男', 'info': "宝宝宝宝宝"},
        3: {'name': '章鱼哥', 'age': 18, 'gender': '女', 'info': "鱼鱼鱼鱼鱼鱼"},
    }
    
    @app.route('/')
    def index():
        # 渲染页面,展示用户信息,前端使用的是jinjia2模板语法
        return render_template('index.html', user=USERS)
    
    # 前端通过转换器传入id参数
    @app.route('/detail/<int:id>')
    def detail(id):
        # 拿到该id用户渲染到详情页面
        user = USERS[id]
        return render_template('detail.html', user=user)
    
    # flask默认只允许get请求, 可以通过methods添加请求类型
    @app.route('/login/', methods=["GET", "POST"])
    def login():
        if request.method == "POST":
            password = request.form.get('password')
            username = request.form.get('username')
            if username == "shawn" and password == "123":
                # 登入成功重定向到首页
                return redirect('/')
            else:
                return render_template('login.html', error='用户名或密码错误!')
        return render_template('login.html')
    
    
    if __name__ == '__main__':
        app.run()
    
    • index.html
    
    
    
        <meta charset="UTF-8">
        <title>Title</title>
    
    
        <h1>用户信息</h1>
        
            {% for k,v in user.items() %}
            
            {% endfor %}
        <table><tbody><tr>
                <td>{{k}}</td>
                <td>{{v.name}}</td>
                <td>{{v['name']}}</td>
                <td>{{v.get('name')}}</td>
                <td><a href="/detail/{{k}}"> 查看简介</a></td>
            </tr></tbody></table>
    
    
    
    • detail.html
    
    <h1>用户信息: {{user.name}}</h1>
        <div>
            {{user.info}}
        </div>
    
    
    • login.html
    
    <h1>用户登录</h1>
        <form method="post">
            <input type="text" name="username">
            <input type="password" name="password">
            <input type="submit" value="登录"><br><span style="color: red">{{error}}</span>
        </form>
    
    

    </int:id>

  • 相关阅读:
    【bzoj4276】[ONTAK2015]Bajtman i Okrągły Robin 线段树优化建图+费用流
    【bzoj4383】[POI2015]Pustynia 线段树优化建图+差分约束系统+拓扑排序
    【bzoj4519】[Cqoi2016]不同的最小割 分治+最小割
    【bzoj2229】[Zjoi2011]最小割 分治+网络流最小割
    【bzoj3689】异或之 可持久化Trie树+堆
    【bzoj1109】[POI2007]堆积木Klo 动态规划+树状数组
    【bzoj2780】[Spoj]8093 Sevenk Love Oimaster 广义后缀自动机
    【bzoj4804】欧拉心算 欧拉函数
    【bzoj3231】[Sdoi2008]递归数列 矩阵乘法+快速幂
    【bzoj3589】动态树 树链剖分+线段树
  • 原文地址:https://www.cnblogs.com/songhaixing/p/14851592.html
Copyright © 2011-2022 走看看