草庐IT

Flask教程(一)

小陈工 2023-03-28 原文

一、Http流程:

二、框架概念

2.1Web框架:

                        能够被服务器调用起来,根据客户端的不同请求执行不同的逻辑处理形成要返回的数据的程序核心:

                        实现路由和视图(业务逻辑处理)

2.2框架的轻重:

                        重量级的框架:为方便业务程序的开发,提供了丰富的工具、组件,如Django

                        轻量级的框架:只提供Web框架的核心功能,自由、灵活、高度定制,如Flask、Tornado

2.3虚拟环境的搭建:

                        pip freeze > requirements.txt    (将虚拟环境安装的包导出到txt文件中)

                        pip install –r requirements.txt    (使用pip批量下载txt文件中的包)

三、了解Flask

3.1简介:Flask诞生于2010年,是Armin ronacher(人名)用Python语言基于Werkzeug工具箱编写的轻量级Web开发框架。它主要面向需求简单的小应用。Flask本身相当于一个内核,其他几乎所有的功能都需要用第三方的扩展来实现。

Flask框架的核心就是Werkzeug(路由模块)和Jinja2(模块引擎)

3.2地位:Python最出名的框架要数Django,此外还有Flask、Tornado等框架。虽然Flask不是最出名的框架,但是Flask应该算是最灵活的框架之一,这也是Flask受到广大开发者喜爱的原因。

3.3Flask的扩展包:

             Flask-SQLalchemy:操作数据库;

             Flask-migrate:管理迁移数据库;

             Flask-Mail:邮件;

             Flask-WTF:表单;

             Flask-script:插入脚本;

             Flask-Login:认证用户状态;

             Flask-RESTful:开发REST API的工具;

             Flask-Bootstrap:集成前端Twitter Bootstrap框架;

             Flask-Moment:本地化日期和时间;

四、第一个Flask程序

# 导入Flask类

from flask import Flask

#Flask类接收一个参数__name__

app = Flask(__name__)

# 装饰器的作用是将路由映射到视图函数index

@app.route('/')

def index():

    return 'Hello World'

# Flask应用程序实例的run方法启动WEB服务器

if __name__ == '__main__':

    app.run()

五、Flask的配置参数设置

5.1. 使用配置文件:

                app.config.from_pyfile("config.cfg")

5.2. 使用对象配置参数:

                class Config(object):

                            DEBUG = True

                            ITCAST = "python"

                app.config.from_object(Config)

5.3. 直接操作config的字典对象:

                app.config["DEBUG"] = True

总结:Flask中使用最多的配置方式是使用对象配置参数

六、Flask的路由配置

6.1限制路由的访问方式:

            @app.route('/sample',methods=['GET', 'POST'])

6.2使用url_for进行反解析

6.3动态路由:

            @app.route('/user/<int:id>')  #尖括号中冒号左边为参数的类型,右边为参数的名字

6.4转换器:

from flask import Flask

from werkzeug.routing import BaseConverter#从werkzeug工具包中导入识别正则表达式的包

class Regex_url(BaseConverter):                              #自定义转换器类,继承包

    def __init__(self, url_map, *args):

        super(Regex_url, self).__init__(url_map)       #继承父类的方法,初始化路由配置

        self.regex = args[0]                                       #将传入的正则表达式进行解析

app = Flask(__name__)

app.url_map.converters['re'] = Regex_url                #将写好的转换器类导入应用中

@app.route('/user/<re("[a-z]{3}"):id>')                    #使用转换器

def hello_itcast(id):

    return 'hello %s' %id

七、Flask的各种功能和组件

7.1获取请求参数(request):

from flask importrequest                    

            #request中包含了前端发送过来的所有请求数据

            # form和data是用来提取请求体数据

            # 通过requset.form可以直接提取请求体中的表单格式的数据, 是一个类字典的对象

            # 通过get方法只能拿到多个同名参数的第一个

示例:name = request.form.get("name")

7.2上传文件:

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

            def upload():

            """接受前端传送过来的文件"""

file_obj = request.files.get("pic")

            # 直接使用上传的文件对象保存

file_obj.save("./demo1.png")

            return "上传成功"

7.3with语句的使用:

 with Foo() as foo:

#进入with语句的时候,with帮助我们调用对象的__enter__方法,

#离开with语句的时候,with帮助我们调用对象的__exit__方法

7.4abort函数的使用:

            from flask import  abort, Response

            # 使用abort函数可以立即终止视图函数的执行

            # 并可以返回给前端特定的信息

            # 传递状态码信息, 必须是标准的http状态码

abort(404)

7.5自定义错误处理函数:

            # 定义错误处理的方法

@app.errorhandler(404)

            def handle_404_error(err):

                    """自定义的处理错误方法"""

                    # 这个函数的返回值会是前端用户看到的最终结果

                    return u"出现了404错误, 错误信息:%s" % err

7.6设置响应信息:

            from flask import make_response

            # 使用make_response 来构造响应信息

            resp =make_response("index page 2")

resp.status = "999 itcast"  # 设置状态码

resp.headers["city"] = "sz"  # 设置响应头

            return resp

7.7返回json数据的方法:

from flask import Flask,jsonify

     return jsonify(city="sz", country="china")

7.8cookie的使用:

            # 设置cookie, 默认有效期是临时cookie,浏览器关闭就失效

            # max_age设置有效期,单位:秒

            resp.set_cookie("Itcast2", "Python1", max_age=3600)

            c = request.cookies.get("Itcast")

7.9session的使用:

7.9.1 flask的session需要用到的秘钥字符串:

                from flask import session

                app.config["SECRET_KEY"] = "dhsodfhisfhosdhf29fy989"

7.9.2session的机制:

7.10上下文的使用:

            请求上下文(request context)

            request和session都属于请求上下文对象。

            应用上下文(application context)

            current_app和g都属于应用上下文对象。

            current_app:表示当前运行程序文件的程序实例。

            g:处理请求时,用于临时存储的对象,每次请求都会重设这个变量。

7.11请求钩子:

                请求钩子是通过装饰器的形式实现,Flask支持如下四种请求钩子:

                        before_first_request:在处理第一个请求前运行。

                        before_request:在每次请求前运行。

                        after_request(response):如果没有未处理的异常抛出,在每次请求后运行。

                        teardown_request(response):在每次请求后运行,即使有未处理的异常抛出。

              使用举例:    @app.before_first_request

7.12 Flask-Script扩展命令行:

        安装Flask-Script:pip install Flask-Script

        使用:

                from flask import Flask

                from flask_script import Manager

                app = Flask(__name__)

                manager = Manager(app)

                @app.route('/')

                def index():

                        return '床前明月光'

                if __name__ == "__main__":

                       manager.run()    ...

7.13 Jinja2模板:

7.13.1模板的使用示例:

            @app.route("/")

             def index():

                    returnrender_template("index.html", name="python")

7.13.2模板前端使用的过滤器:

            safe:禁用转义;

<p>{{ '<em>hello</em>' | safe }}</p>

            capitalize:把变量值的首字母转成大写,其余字母转小写;

<p>{{ 'hello' | capitalize }}</p>

            lower:把值转成小写;

<p>{{ 'HELLO' | lower }}</p>

            upper:把值转成大写;

 <p>{{ 'hello' | upper }}</p>

            title:把值中的每个单词的首字母都转成大写;

<p>{{ 'hello' | title }}</p>

            trim:把值的首尾空格去掉;

<p>{{ ' hello world ' | trim }}</p>

            reverse:字符串反转;

<p>{{ 'olleh' | reverse }}</p>

            format:格式化输出;

<p>{{ '%s is %d' | format('name',17) }}</p>

            striptags:渲染之前把值中所有的HTML标签都删掉;

<p>{{ '<em>hello</em>' | striptags }}</p>

            链式过滤器(使用两个过滤器):

<p>{{ “ hello world  “ | trim | upper }}</p>

            列表过滤器:

            first:取第一个元素

           <p>{{ [1,2,3,4,5,6] | first }}</p>

            last:取最后一个元素

           <p>{{ [1,2,3,4,5,6] | last }}</p>

            length:获取列表长度

           <p>{{ [1,2,3,4,5,6] | length }}</p>

            sum:列表求和

           <p>{{ [1,2,3,4,5,6] | sum }}</p>

            sort:列表排序

           <p>{{ [6,2,3,1,5,4] | sort }}</p>

            自定义过滤器:

            注意:自定义的过滤器名称如果和内置的过滤器重名,会覆盖内置的过滤器。

            使用举例:

            @app.template_filter('db3')        #db3为模板中使用的装饰器名字

            def filter_double_sort(ls):

                    return ls[::-3]

    7.14 使用Flask-WTF实现表单:

    7.14.1视图函数使用示例:

 #导入wtf扩展的表单类

                    from flask_wtf import FlaskForm

                    #导入自定义表单需要的字段

                    from wtforms import SubmitField,StringField,PasswordField

                    #导入wtf扩展提供的表单验证器

                    from wtforms.validators import DataRequired,EqualTo

                    app = Flask(__name__)                #创建app

                    app.config['SECRET_KEY']='1'    #该模块需要设置 SECRET_KEY 的配置参数

                    # 定义表单的模型类

        classRegisterForm(FlaskForm):

        """自定义的注册表单模型类"""

            # 名字 验证器/验证器

            # DataRequired 保证数据必须填写,并且不能为空

            user_name = StringField(label=u"用户名",validators=[DataRequired(u"用户名不能为空")])

            password = PasswordField(label=u"密码",validators=[DataRequired(u"密码不能为空")])

            password2 = PasswordField(label=u"确认密码",validators=[DataRequired(u"确认密码不能为空"),

                                         EqualTo("password",u"两次密码不一致")])

            submit = SubmitField(label=u"提交")

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

        defregister():

            # 创建表单对象, 如果是post请求,前端发送了数据,flask会把数据在构造form对象的时候,存放到对象中

            form = RegisterForm()

            # 判断form中的数据是否合理

            # 如果form中的数据完全满足所有的验证器,则返回真,否则返回假

            ifform.validate_on_submit():

            # 表示验证合格

            # 提取数据

                uname = form.user_name.data

            returnrender_template("register.html",form=form)

    7.14.2模板html文件中使用示例:

                      <formmethod="post"> 

            {{ form.csrf_token }}       #先使用表单的csrf验证

            {{ form.user_name.label }}    #获取表单对象的label的值

            <p>{{form.user_name}}</p>    

            {% for msg in form.user_name.errors %}   #循环获取表单校验的错误信息

            <p>{{msg}}</p>

            {% endfor %}

         </form>

    7.15 宏:类似于python中的函数,宏的作用就是在模板中重复利用代码,避免代码冗余。

    7.15.1宏的定义:                   

                        {% macroinput(name,value='',type='text',size=20) %}

                                <input type="{{ type }}"

                                           name="{{ name }}"

                                           value="{{ value }}"

                                           size="{{ size }}"/>

                        {% endmacro %}

    7.15.2宏的使用:

                        {{input(value='name',type='password',size=40)}}

    7.15.3导入其他模板的宏:

                        {% import 'macro.html' as func %}

                        {% func.input() %}

有关Flask教程(一)的更多相关文章

  1. postman接口测试工具-基础使用教程 - 2

    1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,

  2. 在VMware16虚拟机安装Ubuntu详细教程 - 2

    在VMware16.2.4安装Ubuntu一、安装VMware1.打开VMwareWorkstationPro官网,点击即可进入。2.进入后向下滑动找到Workstation16ProforWindows,点击立即下载。3.下载完成,文件大小615MB,如下图:4.鼠标右击,以管理员身份运行。5.点击下一步6.勾选条款,点击下一步7.先勾选,再点击下一步8.去掉勾选,点击下一步9.点击下一步10.点击安装11.点击许可证12.在百度上搜索VM16许可证,复制填入,然后点击输入即可,亲测有效。13.点击完成14.重启系统,点击是15.双击VMwareWorkstationPro图标,进入虚拟机主

  3. hadoop安装之保姆级教程(二)之YARN的配置 - 2

    1.1.1 YARN的介绍 为克服Hadoop1.0中HDFS和MapReduce存在的各种问题⽽提出的,针对Hadoop1.0中的MapReduce在扩展性和多框架⽀持⽅⾯的不⾜,提出了全新的资源管理框架YARN. ApacheYARN(YetanotherResourceNegotiator的缩写)是Hadoop集群的资源管理系统,负责为计算程序提供服务器计算资源,相当于⼀个分布式的操作系统平台,⽽MapReduce等计算程序则相当于运⾏于操作系统之上的应⽤程序。 YARN被引⼊Hadoop2,最初是为了改善MapReduce的实现,但是因为具有⾜够的通⽤性,同样可以⽀持其他的分布式计算模

  4. ruby - 在 RUBY 上的 PADRINO 框架上使用 RSPEC 进行测试的教程 - 2

    我是Ruby新手,并被要求在我们的新项目中使用它。我们还被要求使用Padrino(Sinatra)作为后端/框架。我们被要求使用Rspec进行测试。我一直在寻找可以指导在Padrino上使用RspecforRuby的教程。我得到的主要是引用RoR。但是,我需要RubyonPadrino。请在任何入门/指南/引用/讨论等方面指导我。如有不妥之处请指正。可能是我没有针对我的问题搜索正确的词/短语组合。我正在使用Ruby1.9.3和Padrinov.0.10.6。注意:我还提到了SOquestion,但它没有帮助。 最佳答案 我没用过Pa

  5. 区块链入门教程(6)--WeBASE-Front节点前置服务安装 - 2

    文章目录1.任务背景2.任务目标3.相关知识点4.任务实操4.1安装配置JDK4.2启动FISCOBCOS4.3下载解压WeBASE-Front4.4拷贝sdk证书文件4.5启动节点4.6访问节点4.7检查运行状态5.任务总结1.任务背景FISCOBCOS其实是有控制台管理工具,用来对区块链系统进行各种管理操作。但是对于初学者来说,还是可视化界面更友好,本节就来介绍WeBASE管理平台,这是一款微众银行开源的自研区块链中间件平台,可以降低区块链使用的门槛,大幅提高区块链应用的开发效率。微众银行是腾讯牵头设立的民营银行,在国内民营银行里还是比较出名的。微众银行参与FISCOBCOS生态建设,一定

  6. ruby-on-rails - rails 教程 : Putting flash messages in partial yields error "undefined method ` each' for nil:NilClass"? - 2

    这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:FlashMessagesinPartials(Rails3)我正在做MichaelHartl的Railstutorial和listing7.26将flash消息添加到应用程序布局:...">...这很好用。但是,我试图通过在我的部分文件夹中创建一个_flash.html.erb来清理这段代码...">-->...并且比使用......在我的应用程序布局中,我的所有Rspec测试开始失败,每个测试都显示以下消息:Failure/Error:before{visitsignup_path}ActionView:

  7. ruby-on-rails - Ruby on Rails 教程 - 5.26 - Sublime Text "Unable to Save"新文件 "spec/support/utilities.rb" - 2

    我正在使用SublimeText2,同时遵循MichaelHartl的RubyonRails教程。可以在http://ruby.railstutorial.org/book/ruby-on-rails-tutorial找到我所指的教程的具体部分。(ctrl+F“list5.26”)。我能够创建规范/支持文件。但是,在尝试创建spec/support/utilities.rb文件时,我收到消息“无法保存~/rails_projects/sample_app/spec/support/utilities.rb”。有人知道为什么会这样吗?SublimeText论坛上有人似乎遇到了完全相同的问

  8. 华为ensp详细安装包、安装教程及所遇问题 - 2

    目录一、安装包链接二、安装详细步骤1.安装Wireshark和WinPcap2.安装OracleVMVirtualBox3.安装ensp三、安装后注册四、启动路由器出现40错误怎么解决一、安装包链接二、安装详细步骤链接:https://pan.baidu.com/s/1QbUUYMOMIV2oeIKHWP1SpA?pwd=xftx提取码:xftx1.安装Wireshark和WinPcap找到Wireshark安装包所在文件夹,双击它,按照以下步骤安装。2.安装OracleVMVirtualBox找到OracleVMVirtualBox安装包所在文件夹,双击它,按照以下步骤安装。注:可自定义安装

  9. 【云计算】私有云在VMware下虚拟机的创建与配置(图文教程) - 2

    【适用平台】私有云   说明:完成私有云部分是需要两台虚拟机的,分别为controller、compute两个节点,但我们只需配置一台,然后克隆就方便多啦!需要用到的映射文件:关于vm的安装我就不介绍的,毕竟挺简单的,下面让我们看看基于私有云模块中,虚拟机的搭建吧。1、创建新的虚拟机,这里一般我会选择自定义,毕竟后面的配置都要根据私有云相关来进行搭建,会比较复杂。(如果是基础的可以选择典型,典型的满足一般虚拟机的配置) 2、选择稍后安装操作系统会比较方便后续的选择,这里你也可以自己选择自己的映像文件(但不建议)  3、我们是基于Linux下操作的,所以选择Linux客户机操作系统,版本选择自己

  10. 关于如何为 PostgreSQL 编写存储过程的 Ruby 教程? - 2

    听说PostgreSQL的可以用Ruby写存储过程但我一直没能找到更多关于它的信息,教人们如何实际去做。有人可以为此推荐好的资源。谢谢 最佳答案 显然,您需要安装PL/Ruby。之后,你可以写:CREATEFUNCTIONruby_max(int4,int4)RETURNSint4AS'ifargs[0].to_i>args[1].to_ireturnargs[0]elsereturnargs[1]end'LANGUAGE'plruby';查看其GitHubrepository安装说明。

随机推荐