Flask框架

Flask框架:

python三大框架优缺点

  Flask:

    优点: 小而精,短小精悍,第三方组件特别多

    缺点: 组件更新速度取决于开源者 

  Tornado:

    优点: 原生的WebSocket, 异步任务, IO非阻塞玩

    缺点: 没有组件,Session都没有

  Django:

   优点: 大而全,组件非常全面

    缺点: 太大,重量级框架,加载太大,浪费资源

 Flask的优势:

Flask的优势
Flask中的Werkzuge原理,__call__()
Flask的第一个Hello OldBoyEDU
Flask的 HTTPresponse render_template redirect
Flask中的 request
Flask中的 Jinja2 ,Markup
Flask中的 session secret_key
Flask中的路由系统 url_for

Werkzuge:

from werkzeug.wrappers import Response, Request
from werkzeug.serving import run_simple

# application源码里面 get_wsgi_headers 里面有个__call__方法
# 可以调用__call__ 在执行flk的时候执行call里面的结果
@Request.application
def flk(r):
    print(r.url)
    if r.url == ‘/123‘:
        asd()
    return Response("hello")

# flk
run_simple("127.0.0.1", 5500, flk)

def asd():
    print(‘kermit‘)

asd()

Flask三剑客:

HTTPresponse: return "Hello OldBoyEDU"
render_template: return render_template("login.html") #templates
redirect: return redirect("/login")

# Httpresponse
@apl.route("/index")
def index():
    return "Hello OldBoyEDU"

# render_template
@apl.route("/login")
def login():
    return render_template("login.html")

# redirect
@apl.route("/")
def root_path():
    return redirect("/login")

Flask需要自己开启:(必走流程)

from flask import Flask, render_template, redirect
apl = Flask(__name__)
apl.run()  # 可以自定义ip 端口  和debug模式

Request:
request.method 获取请求方式
request.form 获取FromData数据(通常情况下的POST请求)
request.args 获取GET方式提交的数据
request.files 获取file
request.url_about 获取所有的关于URL的参数
request.values 获取全部提交方式
to_dict 坑,覆盖,GET覆盖POST
request.headers 获取头部信息
request.cookie 获取客户端cookie
request.json 数据头:application/json
request.data 在没有任何数据头的情况提交的POST

模板语言:

Flask 基于 Jinja2 做了一层小小小小小小的封装
向前端传递数据 render_template 参数传递 stu = {k1:v1}
{{ stu }}
    <td>{{ stu.name }}</td>
    <td>{{ stu["age"] }}</td>
    {% if stu.get("gender") == "中"  %}
        <td>男</td>
    {% else %}
        <td>{{ stu.get("gender") }}</td>
    {% endif %}

    STUDENT_LIST = [
        {‘name‘: ‘Old‘, ‘age‘: 38, ‘gender‘: ‘中‘},
        {‘name‘: ‘Boy‘, ‘age‘: 73, ‘gender‘: ‘男‘},
        {‘name‘: ‘EDU‘, ‘age‘: 84, ‘gender‘: ‘女‘}
    ]

    <td>{{ stu.0.name }}</td>
    <td>{{ stu[0]["age"] }}</td>
    {% if stu[0].get("gender") == "中"  %}
        <td>男</td>
    {% else %}
        <td>{{ stu.0.get("gender") }}</td>
    {% endif %}

    @apl.template_global()
    def a_b_sum(a,b):
        return a+b
    {{ a_b_sum(123,234) }}

    @apl.template_filter()
    def a_b_c_sum(a,b,c):
        return a+b+c
    {{ 123 | a_b_c_sum(1,2) }}
 安全字符串:Markup 相当于 模板里面有 safe
    {{ input | safe }}
    Markup() : Markup("<input type=‘text‘ name=‘input_tag‘>")

为了让pycharm识别模板语言的格式:设置jinja2的语言

Session:secret_key="" 这个是开启session必备的参数

  form flask import session
    app.secret_key = "随意"
    session["user"] = "xxxx"
    if session.get("user")

Flask 路由 :

 flk.route()

"/index"  路由地址
"/index/<nid>"   动态路由地址(视图函数需要nid参数)
"/index/<int:nid>"   动态路由地址

methods=["GET","POST"]   允许URL的请求方式
endpoint="index"   反向URL操作,可以解决Inner重名的问题
redirect_to="/index2"   服务器端页面跳转  301永久性重定向
strict_slashes=False   可以使用"/"结尾 反之不可以
defaults={"nid":1}   视图函数默认参数

 

 所以例子:

from flask import Flask, Markup, render_template, redirect, request, session, url_for

flk = Flask(__name__)
flk.secret_key = "Dragon"  # 开启session必备的参数

STUDENT = {‘name‘: ‘Old‘, ‘age‘: 38, ‘gender‘: ‘中‘}

STUDENT_LIST = [
    {‘name‘: ‘Old‘, ‘age‘: 38, ‘gender‘: ‘中‘},
    {‘name‘: ‘Boy‘, ‘age‘: 73, ‘gender‘: ‘男‘},
    {‘name‘: ‘EDU‘, ‘age‘: 84, ‘gender‘: ‘女‘}
]

STUDENT_DICT = {
    1: {‘name‘: ‘Old‘, ‘age‘: 38, ‘gender‘: ‘中‘},
    2: {‘name‘: ‘Boy‘, ‘age‘: 73, ‘gender‘: ‘男‘},
    3: {‘name‘: ‘EDU‘, ‘age‘: 84, ‘gender‘: ‘女‘},
}

# 用template_global 可以直接在模板调用这个函数作为参数
# {{ a_b_sum(11,22) }}  33
@flk.template_global()
def a_b_sum(a, b):
    return a + b

# template_filter  可以直接在模板调用这个函数作为参数 + | 前面的数字
# {{ 22 | a_b_c_sum(11,22) }}  55   也就是参数a是22
@flk.template_filter()
def a_b_c_sum(a, b, c):
    return a + b + c

# 装饰器
def wra(func):
    print(‘外部‘)

    def inner(*args, **kwargs):
        print(‘内部‘)
        if session.get(‘user‘):
            return func(*args, **kwargs)
        return redirect(‘/login‘)

    return inner

# 添加 endpoint 参数 是为了如果所有视图都用同一个装饰器会走inner函数,
# 然后会重名,为了给它设置不同的名称
@flk.route("/index/<string:nid>", endpoint="index1")
@wra  # inner = wra(index)
def index(nid):
    # url_for是访问的url相对路径 参数与route的url得一直
    print("nid", url_for("index1", nid=nid))
    # Markup就是在后端写前端页面并且加了safe
    input_tag = Markup("<input type=‘text‘ name=‘input_tag‘>")
    return render_template("index.html", stus=STUDENT_LIST, input_tag=input_tag)

@flk.route("/index2", endpoint="index2")
@wra  # inner = wra(index)
def index2():
    # Markup就是在后端写前端页面并且加了safe
    input_tag = Markup("<input type=‘text‘ name=‘input_tag‘>")
    return render_template("index.html", stus=STUDENT_LIST, input_tag=input_tag)

@flk.route("/index3", endpoint="index3")
@wra  # inner = wra(index)
def index3():
    # Markup就是在后端写前端页面并且加了safe
    input_tag = Markup("<input type=‘text‘ name=‘input_tag‘>")
    return render_template("index.html", stus=STUDENT_LIST, input_tag=input_tag)

@flk.route(‘/login‘, methods=[‘GET‘, ‘POST‘])
def login():
    if request.method == ‘GET‘:
        return render_template(‘login.html‘)
    else:
        # login.html指定了multipart/form-data,所以可以通过request.form来获取
        username = request.form[‘user‘]
        password = request.form[‘pwd‘]
        if username == ‘kermit‘ and password == ‘123‘:
            session[‘user‘] = username
            return redirect(‘/index‘)

        if username == ‘egon‘ and password == ‘123‘:
            session[‘user‘] = username
            return redirect(‘/index‘)

        return render_template(‘login.html‘, msg="用户名密码错误!!!")

if __name__ == ‘__main__‘:
    flk.run(debug=True)

原文地址:https://www.cnblogs.com/kermitjam/p/9508827.html

时间: 2024-11-09 06:27:17

Flask框架的相关文章

Flask框架获取用户IP地址的方法

本文实例讲述了python使用Flask框架获取用户IP地址的方法.分享给大家供大家参考.具体如下: 下面的代码包含了html页面和python代码,非常详细,如果你正使用Flask,也可以学习一下最基本的Flask使用方法. python代码如下: from flask import Flask, render_template, request # Initialize the Flask application app = Flask(__name__) # Default route,

Flask 框架构建

Flask 框架构建,目标构建成Django类似的结构 一. 先看看构建后的效果 # 第一次初始化 python manage.py db init # 生成数据库版本 python manage.py db migrate # 将定义的模型更新到数据库 python manage.py db upgrade 二. 看下范例代码 1.根目录下的manage.py文件: 2. electron/__init__.py  一些初始化工作放在这里了,用到了一些插件flask-sqlalchemy,fl

Flask框架的学习与实战(一):开发环境搭建

Flask是一个使用 Python 编写的轻量级 Web 应用框架.其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2.很多功能的实现都参考了django框架.由于项目需要,在此记录下学习的过程及心得. 工欲善其事,必先利其器.就从搭建一套flask开发环境开始flask之旅吧. 一.平台说明 操作系统:window 7  64bit  数据库:mysql5.6  python:v2.7  开发集成软件:PyCharm5.0 二.开发环境搭建 1.安装flask框架包 1

Flask 框架入门

Flask Flask是一个使用 Python 编写的轻量级 Web 应用框架.其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 . 安装 Flask 依赖两个外部库, Werkzeug和 Jinja2.Werkzeug 是一个 WSGI 工具集,它是 web 应用程序和用于开发和部署的服务器之间的标准接口.Jinja2是Python下一个被广泛应用的模版引擎,他的设计思想来源于Django的模板引擎,并扩展了其语法和一系列强大的功能.其中最显著的一个是增加了沙箱执行功

使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(四)——对 run.py 的调整

使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(三)——使用Flask-Login库实现登录功能 为了方便以后的应用切换,所以需要对 run.py 里的代码进行调整下. 1.在/demo 目录下创建 app_start.py /demo/app_start.py # config=utf-8 from demo

使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(三)——使用Flask-Login库实现登录功能

使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化 本次示例的源码下载:点击下载 Flask-Login 库的中文文档:点击进入 Flask-Login 库的新版英文文档:点击进入 一.导入并初始化 Flask-Login 库 在项目根目录下的/demo/__init__.py 文件的头部,import 进 flask_login 库 from flask_login imp

Flask框架:(一、安装)

Flask 依赖于两个外部库:Werkzeug 和 Jinja2 . Werkzeug 是一个 WSGI (在 web 应用和多种服务器之间开发和部署的标准 Python 接口) 的工具集,Jinja2 负责渲染模板. 1.安装 参考:http://blog.csdn.net/qwiwuqo/article/details/8970621 Flask安装的前提条件 1.已安装python2.x版本 2.已安装easy_install 在安装flask之前,你必须要先安装python和easy_i

flask框架+pygal+sqlit3搭建图形化业务数据分析平台

一. 前言 先说下主要的框架和主要的图形库的特点:(个人见解) Django:python开发的一个重量级的web框架,集成了MVC和ORM等技术,设计之初是为了使开发复杂的.数据库驱动的网站变得简单,然而由于种种原因很少有企业用来开发大型网站,而是拿来做运维开发的很多.其注重组件的重用性和"可插拔性". Flask:python开发的一个轻量级的web框架,它使用简单的核心,用 extension 增加其他功能,扩增的弹性很好,并且上手比较容易. Echars:百度开源的一个图像库,

Flask框架2

Flask框架的学习与实战(二):实战小项目 昨天写了一篇flask开发环境搭建,今天继续,进行一个实战小项目-blog系统. blog系统很简单,只有一个页面,然后麻雀虽小五脏俱全.这里目的不是为了做项目而做项目,这篇文章本意是通过这次练习传达以下几个知识点: 1.从全局上了解flask项目的目录结构 2.flask项目的运行机制 3.flask框架实现MVC架构 4.flask-sqlalchemy 操作mysql数据库 一.新建项目:blog系统 在pycharm中,新建flask项目,如

基于Flask框架的Python web程序的开发实战 &lt;一&gt; 环境搭建

最近在看<Flask Web开发基于Python的Web应用开发实战>Miguel Grinberg著.安道译 这本书,一步步跟着学习Flask框架的应用,这里做一下笔记 电脑只安装一个Python2.7就行了,用的IDE还是官方那个跟记事本差不多的编辑器,先原始一点,以后再用PyCharm开发,我系统是Win8.1 x64 一:虚拟环境配置 虚拟环境使用第三方工具virtualenv创建,打开cmd,输入virtualenv命令来检测是否已经安装,我已经装过了,所以会提示:You must