• 225.1.flask初体验


    1.简单flaskweb

    # coding=utf-8
    
    from flask import Flask, render_template, request, redirect, session
    
    app = Flask(__name__, template_folder="templates")
    
    app.secret_key = "abc"
    
    
    USER_DICT= {
        "1": {"name": "alex", "age": 19},
        "2": {"name": "big", "age": 19},
        "3": {"name": "people", "age": 19},
        "4": {"name": "person", "age": 19},
    }
    
    @app.route("/login", methods=["POST", "GET"])
    def login():
        print("start")
        if request.method == "GET":
            return render_template("login.html")
        else:
            # request.args
            user = request.form.get("user")
            pwd = request.form.get("pwd")
            if user == "alex" and pwd == "123":
                session["user_info"] = user  # 放到浏览器cookie中
                return redirect("/index")
            else:
                return render_template("login.html", **{"msg": "login fail"})
    
    
    @app.route("/index")
    def index():
        user_info = session.get("user_info")
        if not user_info:
            return redirect("/login")
    
        return render_template("index.html", user_dict=USER_DICT)
    
    
    @app.route("/detail")
    def detail():
        user_id = request.args.get("user_id")
        return render_template("detail.html", user=USER_DICT.get(user_id))
    
    
    @app.route("/lgout")
    def lgout():
        user_info = session.get("user_info")
        if not user_info:
            return redirect("/login")
    
        return "欢迎"
    
    
    @app.route("/test")
    def test():
        dns = {
            'tcp_test': {
                    'nameserver': ['dns1 223.5.5.5: 53', 'dns2 114.114.114.114: 53'],
                    'hold': ['other 30s', 'refsed 30s', 'nx 30s', 'timeot 30s', 'valid 10s'],
                    'resolve_retries': '3',
                    'timeot': 'retry 1s'
                },
            'http_test': {
                'nameserver': ['dns1 223.5.5.5: 53', 'dns2 114.114.114.114: 53'],
                'hold': ['other 30s', 'refsed 30s', 'nx 30s', 'timeot 30s', 'valid 10s'],
                'resolve_retries': '3',
                'timeot': 'retry 1s'
                }
            }
    
        return render_template("test.j2", **{"dns": dns})
    
    
    if __name__ == '__main__':
        app.run(debug=True)
    

    2.html文件

    • login.html
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>login</title>
    </head>
    <body>
    <h1> 登录 </h1>
    <form method="post">
        <input type="text" name="user">
        <input type="password" name="pwd">
        <input type="submit" name="submit"> {{ msg }}
    </form>
    </body>
    </html>
    
    • index.html
      <!DOCTYPE html>
      <html lang="en">
      <head>
          <meta charset="UTF-8">
          <title>Title</title>
      </head>
      <body>
    
      {% for key, item in user_dict.items() %}
          <li src="/detail?uid={{ key }}">{{item.name}} {{item.age}} </li>
      {% endfor %}
      </body>
      </html>
    
    • detail.html
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <li>{{user.name}} {{user.age}}</li>
    </body>
    </html>
    

    3.附加内容

    """
    - 迭代器: 内部实现__next__方法, 帮助我们向后一个一个取值
    - 生成器: 一个函数内不存在yield关键字: v = 函数()
            应用场景:
                 - range/xrange
                    - py2: xrange(1000000)
                    - py3: range(1000000)
                - redis 中的hscan_iter
                    - 每次取12个
                - stark组件
                    - django 模板渲染时可以返回一个生成器对象
    - 可迭代对象: 一个类内部实现了__iter__方法, 方法返回一个迭代器
        class Foo(object):
            def __iter__(self):
                return iter([1,2,3,4])
        obj = Foo()
        应用场景
            - wtforms中循环打印所有字段对象
            - LocalProxy
            - list, dict, tuple
            总结: 如果想要一个对象可以被循环, 必须有一个__iter__方法
    - 装饰器: 不改变原函数代码的基础上, 在执行前后进行定制操作
        - 手写
        - 应用场景:
            - flask路由系统
            - flask before_request
            - csrf
            - django内置
            - functiontolls warp函数
    """
    

    参考:这一系列flask都是老男孩2018年全栈8期
    https://www.cnblogs.com/wupeiqi/aticles/7552008.html

  • 相关阅读:
    mysql基础(三)
    mysql基础(二)
    Mysql基础(一)
    Less32-Less-33
    Less-27
    Less-26
    Less-25
    Less-23
    Less18-Less19
    Less13-Less-14
  • 原文地址:https://www.cnblogs.com/liuzhanghao/p/16337470.html
Copyright © 2020-2023  润新知