flask学习

学习博客:https://www.cnblogs.com/sss4/p/8097653.html

1.配置

app.debug=''
第一种:app.config['DEBUG']=True
第二种:
app.config.from_pyfile('py文件')
from_json
from _object:可以传类

 2.路由

典型写法:@app.route('/index',methods=['GET'],enpoint='别名')
路由本质:app.add_url_rule()
参数:了解
自定义转换器(支持正则)

3.CBV加装饰器

decorators=[auth,]
class IndexView(views.View):
    methods = ['GET']
    decorators = [auth, ]

     def dispatch_request(self):
            print('Index')
            return 'Index!'

4. 模板

支持执行函数,并且传参数
|safe

1.Markup等价django的mark_safe ,


2.extends,include一模一样

 

5.请求响应

 request请求相关信息
        # request.method
        # request.args
        # request.form
        request.files  

 response   

      # return "字符串"
      # return render_template('html模板路径',**{})
      # return redirect('/index.html')
      #return jsonify({'k1':'v1'})

      jsonify--返回json格式

      往里写cookie

        res=make_response('ok')

        res.set_cookie()

 

session

设置:session['username'] = 'cao'
取值:user=session['user'] 删除:session.pop('user')
   del session['user']

闪现(错误信息展示)

flash('',category='xx')
get_flashed_messages(category_filter=['x1'])

errorhandler

路径不存在时404,服务器内部错误500

@app.errorhandler(404)
def error_404(arg):
    return "404错误了"

template_global

标签

@app.template_global()
  def sb(a1, a2):
    return a1 + a2
  #{{sb(1,2)}}

template_filter

过滤器

@app.template_filter()
def db(a1, a2, a3):
    return a1 + a2 + a3
#{{ 1|db(2,3)}}

 蓝图

对程序进行目录结构划分

使用蓝图之大型系统

详见代码:pro_flask_大型应用目录示例.zip

总结:

1 xxx = Blueprint('account', name,url_prefix='/xxx') :蓝图URL前缀,表示url的前缀,在该蓝图下所有url都加前缀

2 xxx = Blueprint('account', name,url_prefix='/xxx',template_folder='tpls'):给当前蓝图单独使用templates,向上查找,当前找不到,会找总templates

3 蓝图的befort_request,对当前蓝图有效

4 大型项目,可以模拟出类似于django中app的概念

什么是函数,什么是方法?

 

在类内部定义的函数,由对象来调用就是方法,类直接调用,它还是函数

 

请求上下文

-请求来了,先经过实现wsgi协议的web服务器

        -app.call

        -ctx:包了两个东西,一个是request,一个空session

        -ctx.push  {线程id:{stack:[ctx,]}}

                生成了了应用上下文app_ctx:{线程id:{stack:[app_ctx,]}}

                打开session,session赋值

        -执行dispatch方法(请求扩展的东西)

            -视图函数:

                request.method

                session.get()

  -ctx.auto_pop(error)
  -flask-session

 wtforms

类似于django的form组件基本类似

数据校验功能
渲染表单功能
渲染错误信息
钩子函数

数据库连接池

有两种模式:

1.来一个线程。创建一个连接,100个线程就100个链接,相当于给每一个线程独享自己的数据库连接

2.先创建出数据库池子,如果有50个,就是一个池子里面50个,25个结束了,其他的25个再进来

基本概念:程序一开始,先创建出一堆链接,以后有线程要链接数据库,直接从池子里面取出

DButils模块

  基于pymysql模块

 

为什么要用数据库连接池?

    -为了防止数据读写错误

 

多个线程访问同一个资源 ?    
-加锁    -拷贝一份独享
数据库连接池对象应该是单例的

 

SQLAlchemy(使用范围较广)

第三方的orm框架

操作mysql数据库,还得需要pymysql

可以执行原生sql

django的orm也支持原生sql(没怎么用过)

django的orm直接用命令做数据库同步操作

SQLAlchemy需要写方法,执行方法,来做数据库同步
SQLAlchemy只能创建数据表,删除数据表,不能修改数据表
  -自己做,在数据表中新增字段,models中添加相应的字段

 主要用来orm操作

 fliter 传的是表达式

 filter_by 传参数

 增,删,改都需要提交commit()

 主键做成自增,数据如果没有提交,自增字段也会增加

 

posted @ 2019-02-18 15:04  粗糙的丸子  阅读(95)  评论(0)    收藏  举报