12.1 flask基础之简单实用

摘要:
微框架中的“微”意味着Flask旨在保持核心简单且易于扩展。Flask不会为您做出太多的决定,例如使用哪个数据库。Flask选择的那些,例如使用哪个模板引擎,很容易替换。默认情况下,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、当你点击提交出现这样的错

12.1 flask基础之简单实用第6张

解决方案

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

 2、设置session的时候

12.1 flask基础之简单实用第7张

解决方法:设置秘钥

app.secret_key = "sdsfdsgdfgdfgfh"

免责声明:文章转载自《12.1 flask基础之简单实用》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇GO开发:用go写个日志监控系统内存转储文件 Memory.dmp下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

AttributeError: module 'DBBase' has no attribute 'DBBase'

AttributeError: module 'DBBase' has no attribute 'DBBase' pycharm不会将当前文件目录自动加入自己的sourse_path。右键make_directory as-->Sources Root将当前工作的文件夹加入source_path就可以了。 还有一点:models加一个点,表示同级目...

[Python自学] Flask框架 (3) (路由、CBV、自定义正则动态路由、请求处理流程、蓝图)

一、路由系统 1.浅析@app.route的源码 我们使用@app.route("/index")可以给视图函数加上路由映射。我们分析一下@app.route装饰器的实现源码: def route(self, rule, **options): def decorator(f): endpoint = options.pop("en...

分布式下Session一致性问题

一、Session一致性问题 1.1 什么是Session 用户使用网站的服务,基本上需要浏览器和web服务器进行多次交互,web服务器如何知道哪些请求是来自哪个会话的? 具体方式为:在会话开始时,分配一个唯一的会话标识(sessionId),通过cookie把这个标识告诉浏览器,以后每次请求的时候,浏览器都会带上这个会话标识来告诉web服务器请求是属于哪...

ASP.NET 缓存技术

服务器端缓存: 1.Session状态管理: session为每个人缓存数据.也就是说这样缓存的数据并不能同时供多人共享,限于为单个人缓存数据。 2.ASP.NET application asp.net为我们提供了另外一种全局变量保存方法,Application对象,它也是面向所有用户,它的生命周期和应用程序一样,当应用程序初始化后它就开始重建。但它最大...

Mybatis-初识

1、Mybatis整体架构 2、Mybatis启动案例  根据官网介绍官网提供了两个Mybatis启动测试案例(参考:https://mybatis.org/mybatis-3/zh/getting-started.html)  准备资源:    数据库配置及驱动依赖(jdbcDriver、url、username、password)    mybati...

三、搞定Service接口和实现类

1.建包com.myz.service.interfaces,用于存放接口,包com.myz.service.imps,用于存放实现类 2.包com.myz.service.interfaces下新建接口EmployeeServiceInterface packagecom.myz.service.interfaces; importjava.io.Se...