zoukankan      html  css  js  c++  java
  • 12.1 flask基础之简单实用

    一、Flask介绍(轻量级的框架,非常快速的就能把程序搭建起来)

    Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后触发Flask框架,开发人员基于Flask框架提供的功能对请求进行相应的处理,并返回给用户,如果要返回给用户复杂的内容时,需要借助jinja2模板来实现对模板的处理,即:将模板和数据进行渲染,将渲染后的字符串返回给用户浏览器。

    “微”(micro) 并不表示你需要把整个 Web 应用塞进单个 Python 文件(虽然确实可以 ),也不意味着 Flask 在功能上有所欠缺。微框架中的“微”意味着 Flask 旨在保持核心简单而易于扩展。Flask 不会替你做出太多决策——比如使用何种数据库。而那些 Flask 所选择的——比如使用何种模板引擎——则很容易替换。除此之外的一切都由可由你掌握。如此,Flask 可以与您珠联璧合。

    默认情况下,Flask 不包含数据库抽象层、表单验证,或是其它任何已有多种库可以胜任的功能。然而,Flask 支持用扩展来给应用添加这些功能,如同是 Flask 本身实现的一样。众多的扩展提供了数据库集成、表单验证、上传处理、各种各样的开放认证技术等功能。Flask 也许是“微小”的,但它已准备好在需求繁杂的生产环境中投入使用。

    - 和django的比较
        django:无socket,依赖第三方模块wsgi,中间件,路由系统(CBV,FBV),视图函数,ORM。cookie,session,Admin,Form,缓存,信号,序列化。。
        Flask:无socket,中间件(扩展),路由系统,视图(CBV)、第三方模块(依赖jinja2),cookie,session弱爆了

    二、简单使用

    1、安装

    pip3 install flask
    复制代码
    #Flask依赖一个实现wsgi协议的模块:werkzeug
    from werkzeug.wrappers import Request, Response
    
    @Request.application
    def hello(request):
        return Response('Hello World!')
    
    if __name__ == '__main__':
        from werkzeug.serving import run_simple
        run_simple('localhost', 4000, hello)
    复制代码
    复制代码
    from flask import Flask
    app = Flask(__name__)
    
    @app.route('/')
    def hello_world():
        return 'Hello World!'
    
    if __name__ == '__main__':
        app.run()
    复制代码
    复制代码
    from flask import Flask,render_template,request,redirect,session
    app = Flask(__name__)
    app.secret_key = "sdsfdsgdfgdfgfh"
    
    def wrapper(func):
        def inner(*args,**kwargs):
            if not session.get("user_info"):
                return redirect("/login")
            ret = func(*args,**kwargs)
            return ret
        return inner
    
    @app.route("/login",methods=["GET","POST"])
    def login():
        if request.method=="GET":
            return render_template("login.html")
        else:
            print(request.values)   
            username = request.form.get("username")
            password = request.form.get("password")
            if username=="银鑫" and password=="123":
                session["user_info"] = username
                # session.pop("user_info")  #删除session
                return redirect("/index")
            else:
                # return render_template("login.html",**{"msg":"用户名或密码错误"})
                return render_template("login.html",msg="用户名或者密码错误")
    
    @app.route("/index",methods=["GET","POST"])
    @wrapper
    def index():
        # if not session.get("user_info"):
        #     return redirect("/login")
        return render_template("index.html")
    
    
    if __name__ == '__main__':
        app.run(debug=True)
    login.html
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
    
        <title>login</title>
    </head>
    <body>
    
    <h1>login</h1>
    <form action=""  method="post">
        user<input name="username"></input>
        pwd<input name="password">
        </input>
        <input type="submit">
        <span>{{ msg }}</span>
        
    
    </form>
    
    
    </body>
    </html>
    index.html
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
    
        <title>Title</title>
    </head>
    <body>
    
    <h1>hello {{ session["user_info"] }}</h1>
    
    </body>
    </html>

    三、排错

    1、当你点击提交出现这样的错

    解决方案

    @app.route("/login",methods=["GET","POST"])

     2、设置session的时候

    解决方法:设置秘钥

    app.secret_key = "sdsfdsgdfgdfgfh"
  • 相关阅读:
    取得窗口大小和窗口位置兼容所有浏览器的js代码
    一个简单易用的导出Excel类
    如何快速启动chrome插件
    网页表单设计案例
    Ubuntu下的打包解包
    The source file is different from when the module was built. Would you like the debugger to use it anyway?
    FFisher分布
    kalman filter
    Group delay Matlab simulate
    24位位图格式解析
  • 原文地址:https://www.cnblogs.com/yinxin/p/9541918.html
Copyright © 2011-2022 走看看