Py学习  »  Python

python:web框架Falsk知识点总结

python • 6 年前 • 498 次点击  

Falsk

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

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

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

二、安装

      a、安装:pip3 install flask

三、虚拟环境

      a、安装: pip3 install virtualenv

      b、# 创建虚拟环境 virtualenv env1

      c、# 进入虚拟环境 Scripts/activate

      d、 # 退出虚拟环境 Scripts/deactivate

四、flask框架

      a、简介:轻量级框架
                     Django:无socket、中间件、路由系统、视图(CBV,FBV)、 模板、ORM、cookie、Session、Admin、Form、缓存、信号、序列化....
                     Flask:无socket、中间件(扩展)、路由系统、视图(CBV)、第三方模板(jinja2)、cookie、Session弱爆了

      b、 什么是wsgi?
                           Web服务网管接口,协议。

      c、Flask依赖一个实现了WSGI协议的模块:werkzeug

五、flask

       a、 -依赖于wsgi模块:wsgiref,werkzeug,wsgi

       b、  -实例化Flask对象

                  -静态文件前缀  /xxx

                  -静态文件目录

                  -模板路径

        c、 添加路由关系      

                  -将 Rule(url和视图函数)添加到Flask对象的url_map字段中

                  -两种添加路由的方式

        d、request

                 -request.form

                 -request.args 

六、基本使用

a、保存session的数据存到了浏览器上,
        - 优点:减轻了服务端的压力
        - 缺点:不安全

     b、路由系统:  

  • @app.route('/post/')

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

  • @app.route('/user/')

  • @app.route('/post/')

  • @app.route('/post/')

七、路由系统

     a、  -可传入参数     

            @app.route('/user/')

            @qpp.route('/post/',methods=['GET','POST'],endpoint='fff')

     b、反向生成URL:url_for

     c、扩展Flask的路由系统,让它支持正则:

八、请求响应

 a、在django中用make_safe而在Flask中用make_response

九、模板语言   

     a、模板的使用

               Flask使用的是Jinja2模板,所以其语法和Django无差别

     b、自定义模板方法

               Flask中自定义模板方法的方式和Bottle相似,创建一个函数并通过参数的形式传入render_template,

十、session 

      a、 -session是否还有其他方法?

                     -它与字典方法相同

      b、  -session超时时间如何设置:

  c、除请求对象之外,还有一个 session 对象。它允许你在不同请求间存储特定用户的信息。它是在 Cookies 的基础上实现的,并且对 Cookies 进行密钥签名要使用会话,你需要设置一个密钥。

     d、

  • 设置:session['username'] = 'xxx'

  • 删除:session.pop('username', None)

十一、闪现(flash)

     a、session从在在服务端的一个字典中,session保存的数据取一次,它还是会有。而flash是基于session创建的,flash支持在里面放值,只要在里面取值它就会没有。闪现就是

     b、在session的基础上,把它的值真实的放在session上,当去它的时候不仅把它的值取走,还把session的东西去掉。

十二、蓝图

     a、蓝图用于为应用提供目录划分

    • 蓝图URL前缀:xxx = Blueprint('account', __name__,url_prefix='/xxx')

    • 蓝图子域名:xxx = Blueprint('account', __name__,subdomain='admin')
      # 前提需要给配置SERVER_NAME: app.config['SERVER_NAME'] = 'wupeiqi.com:5000'
      # 访问时:admin.wupeiqi.com:5000/login.html

十三、DBUtils

      a、DBUtils是Python的一个用于实现数据库连接池的模块。

      b、连接池的三种模式:

            (1)、第一种模式:

                                 它的缺点:每一次请求反复创建数据库的链接,链接的次数太多

             (2)、第二种模式:

                                 它的缺点:不能支持并发

              (3)、第三种模式:

                                它是基于DBUtils实现数据库连接池

                                        -为每个线程创建一个链接,该线程关闭时,不是真正的关闭,本线程再次调用时,还是使用的最开始的创建的链接,知道线程终止,数据库链接才关闭

                                       -创建一个连接池(10个链接),为所有线程提供链接,使用时来进行获取,使用完毕时,再次放回到连接池。

       c、DBUtils的应用:

十四、session

      a、 session和cookie的原理和区别:

               cookie是保存在浏览器上的键值对
               session是存在服务端的键值对(服务端的session就是一个大字典,字典中是随机字符串)(session与request原理相同)(session原理跟上下文也有关系)

               session依赖于cookie存在

      b、  session流程      

十五、session源码解析

     a、先执行Flask的__call__方法 ,调用出来wsgi_app,它先做request的上下文做完,请求刚进来到push中,它先处理request将请求相关的数据,然后添加到了local中,

     b、 紧接着处理session(将RequestContext对象(request,session)添加到local中),request(将request信息封装到Request(environ)对象并复制给requestContext 对                       象),然后获取cookie中的随机字符串,检验是否有,没有就生成。根据随机字符串,获取服务端session保存的值。把session放到内存中,

     c、  执行wsgi_app方法下面的视图函数。执行完视图函数返回到full_dispatch_requesthong ,触发只执行一次的装饰器中(触发Flask信号),

     d、  执行完这个装饰器,紧接着执行下面的特殊的装饰器,如果这些特殊装饰器没有返回值,那么rv=None,如果有返回值,页面时就显示这个返回值,

     e、如果没有返回值,触发执行那个视图函数,拿返回值。请求执行完返回后,调用finalize_request,对它的返回值进行封装。

十六、Flask和Django的区别 

     a、请求相关的数据           

                  -Django:参数

                  -Flask:    基于Local,LocalStark对象

     b、 多个请求进来会不会混淆            

                  -单线程

                  -多线程

                  -协程

                    解决: from greenlet import getcurrent as get_ident

十七、Flask信号

    a、 Flask框架中的信号基于blinker

    b、安装: pip3 install blinker

    c、十个信号

 d、flask信号本生自己没有,用的是别人的,并且这些信号通过装饰器全部可以代替了的,但是Django里面有些特殊的
就是那些model操作根本没有装饰器,就是同过内置的信号来完成的

十八、django内置的信号

十九、Wtform

    a、WTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进行验证。

    b、安装: pip3 install wtform

    c、用途:

       1、用户登录注册

               当用户登录时候,需要对用户提交的用户名和密码进行多种格式校验。如:

              用户不能为空;用户长度必须大于6;

              密码不能为空;密码长度必须大于12;密码必须包含 字母、数字、特殊字符等(自定义正则);

二十、SQLALchemy

    a、介绍 :      

           SQLALchemy是一个基于Python实现的ORM框架。该框架是建立在DB API之上,使用关系对象映射进行数据库操作

           简言之便就是:将类和对象转换成SQL,然后使用数据API执行SQL并获取执行的结果

    b、安装: pip3 install SQLALchemy

    c、组成部分

  d、SQLALcheam本省无法操作数据库,其必须来pymysql等第三方插件, Dialect用于数据API的交流,根据配置文件的不同

调用不同的数据库API,从而实现对数据库的操作

作者:孟庆健

源自:https://www.cnblogs.com/mengqingjian/p/8452898.html


今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/jBJDAz64jF
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/7266
 
498 次点击