0.什么是第三方?
第1方: python所有者,吉多.范罗苏姆
第2方: 我们开发者自己
第3方: 框架提供者,比如flask的提供者是,Armin Ronacher


1.第三方web框架?
是有一些个人或者组织提供的项目半成品,加上了自己公司的业务之后才是一个完成的项目


2.有哪些知名的第三方框架呢?
Django: 是一个web框架,并且是重量级的,因为提供了很全面的工具和扩展.
flask: 是一个轻量级的框架, 只提供了基本的路由路径处理工具(Werkzeug), 和页面渲染功能(jinja2),如果要实现其他额外的功能需要安装扩展包.
Dpark: 分布式框架
Scrapy: 轻量级爬虫框架
Scikit-learn: 机器学习框架...
TensorFlow: 人工智能相关框架.
Apache: 是美国的一个软件基金会组织.里面提供了350多个开源框架.比如:Tomcat,Hadoop,Spark...


3.Flask框架的特点?
诞生时间是2010年,作者是Armin Ronacher,
里面提供了两个核心内容: Werkzeug + jinja2
Werkzeug: 负责处理请求相关内容
jinja2: 负责渲染页面的.
额外扩展: 比如邮件发送Flask_Mail,Flask_Sqlalchemy,等等.

4.什么是虚拟环境?
就是一个特殊的文件夹.

5.为什么要安装虚拟环境?
答:是为了更加方便的调试各种版本的flask,扩展包,python解释器等.

6.如何安装虚拟环境,以及flask版本?
    

1.查看电脑中是否有虚拟环境?
virtualenv --version
mkvirtualenv --version

2.查看电脑中有那些虚拟环境?
workon

3.创建虚拟环境,创建完成后会自动进入,需要联网
    默认安装的是,python2.x
    mkvirtualenv 虚拟环境名称

    指定安装python3.x
    mkvirtualenv -p python3 虚拟环境名称

    删除虚拟环境:
    rmvirtualenv 虚拟环境

4.退出,进入虚拟环境
deactivate 虚拟环境
workon 虚拟环境名称

-------虚拟环境已经搞定了!

5.安装flask框架包,需要在虚拟环境中
pip install flask==0.10.1


6.查看虚拟环境中有那些扩展包
    pip freeze

7.导出虚拟环境中的扩展包?
pip freeze > requirements.txt

8.使用requirements.txt安装扩展包
pip install -r requirements.txt


7.如何使用pytharm关联,安装好的虚拟环境?
  a.从终端找到虚拟环境,并进入,which python 获取到虚拟环境路径
  b.打开pycharm关联,虚拟环境路径.


8.最简单的helloworld程序?
7行代码

9.helloworld中每句话的含义?


10.url_map,是app身上的一个属性,可以查看访问哪些视图函数和路径之间的关系
格式: app.url_map
返回: 是一个map集合,里面装着地址(路径)和视图函数之间的映射关系


11.如何给存在的视图函数指定访问方式? 可以使用methods
格式: @app.route('/路径',methods=['访问方式1','访问方式2'])
常见的访问方式: GET,POST,PUT,DELETE,等8种


12.url_for(反解析),是flask提供的一个方法,用来通过视图函数名称找到视图函数地址的方法
格式: url_for('视图函数名称',key=value), 返回的是字符串地址


13.redirect,重定向,通过路由地址,找到对应的视图函数名称
格式: redirect('路由地址'), 返回的就是一个响应体对象

14.前后端在交互的时候,格式一般指定成为json格式,因为这样的交互效率最高.
有两种方式可以指定:
1.设置响应体对象的headers属性
    resp = make_response('helloworld')
    resp.headers['Content-Type'] = 'application/json'
    return resp

2.使用flask中提供的方法,jsonify()
    dict = {
        "name":"zhangsan",
        "age":"13"
    }
    return jsonify(dict)
    简化写法:
    return jsonify(name='zhangsan',age=13);


15.在访问视图函数的时候,如何指定参数类型,比如:整数,小数,字符串等内容
格式: @app.route('/地址/<参数类型:变量名>')
常见参数类型:
    int        整数
    float    小数
    path    字符串类型


16.如何需要在浏览器的地址中只能接收三个整数,如何解决?
需要自定义类型!
之所以,int,float,path等类型可以接收整数,小数,等是因为系统已经定义好了指定的类型
指定的类型没有办法满足我们的需要,所以需要自定义.

自定义类型(转换器)格式:
1.自定义类,继承自BaseConverter
2.编写初始化方法,init方法,接收两个参数,url_map,regex,并初始化父类空间和子类空间
3.将自定义转换器类,添加到默认的转换列表中
    app.url_map.converters[key] = 转换器类


17.自定义转换器方法之to_python方法
执行时间: 匹配到规则之后, 执行视图函数之前
作用: 用来过滤数据,还可以做编码转换


18.abort(代号),主动抛出异常代号
场景: 当访问服务器资源的时候,如果不存在/权限不够,可以直接使用abort抛出异常

errorhandler(代号): 可以捕捉异常代号,返回统一的界面.装饰方法执行


19.在使用app.run()的时候,可以传递参数
参数有: host: IP地址默认是127.0.0.1
参数有: port: Port端口默认是5000
参数有: debug: 默认是False
    如果设置成True好处:
        1.改变代码之后不需要重新运行,只需要保存即可
        2.报错之后有友好提示

20.app运行的时候有些配置信息需要加载,有三种方式可以加载内容
方式一: 可以从类中加载
app.config.from_object(类名称)
方式二: 可以从配置文件
app.config.from_pyfile(文件名称)
方式三: 可以从环境变量加载,依赖文件,不常用
app.config.from_envvar('环境名称key')

作用: 以后可以加载数据库配置信息,redis配置信息,session配置信息


21.request,是Werkzeug提供好的请求对象,里面封装了请求相关的所有信息,比如:请求地址,请求参数,请求方式,等等
request.url: 请求地址
request.method: 请求方式
request.args: 请求参数,并且是问好后面拼接的内容,www.baidu.com?name=zhangsan&age=13

....

 

1.请求钩子: 在执行视图函数之前会顺带执行请求钩子所装饰的方法
常见的四种请求钩子有:
before_first_request
    在处理第一个请求前执行
before_request
    在每次请求前执行
    如果在某修饰的函数中返回了一个响应,视图函数将不再被调用
after_request
    如果没有抛出错误,在每次请求后执行
    接受一个参数:视图函数作出的响应
    在此函数中可以对响应值在返回之前做最后一步修改处理
    需要将参数中的响应在此参数中进行返回
teardown_request:
    在每次请求后执行
    接受一个参数:错误信息,如果有相关错误抛出


2.后端向前端页面返回数据的时候,有几种响应体格式可以设置
格式一:
    a.直接返回, 响应体
    return "hello"

    b.返回,响应体 + 状态码
    return "hello",666

    c.返回, 响应体 + 状态码 + 响应头

格式二:
    创建响应体,设置内容再返回
    resp = make_response('hello')
    resp.status = '666'
    resp.headers["content-Type"] = "application/json"


3.状态保持,通过cookie和session来进行状态保持
cookie:用来保存浏览器和服务器交互信息的内容,由服务器设置,存储在浏览器
设置方式:
resp.set_cookie(key,value,max_age)
max_age:表示cookie的有效时间

获取方式:
value = request.cookies.get(key)


4.session: 也是用来做状态保持,比如:登陆状态, 适合存储敏感信息,比如,卡号,密码等,由服务器设置,存储在服务器,需要依赖于cookie(sessionID存储cookie)
设置session:
session[key] = value
获取session:
value = session.get(key)

5.flask一共提供了两种上下文
请求上下文:
request: 相当于一个容器,或者是一个线程局部变量.request是和每一个请求相关的.
session: 相当于一个容器,存储在服务器内部的.线程局部变量.

6.应用上下文:
current_app: 相当于是app的一个代理对象,主要使用在模块开发中.
g: 在一次完整的请求中,都是同一个对象.主要配合装饰器使用(先了解,在项目中具体使用)


7.flask_script: flask中没有提供额外的复杂功能,如果需要实现其他额外的功能需要使用扩展包
作用: 
1.用来通过命令的方式去启动程序,并且可以指定端口和ip,
2.并且配合flask_migrate可以做数据库迁移.

使用流程:
1.安装,pip install flask_script
2.导入包中类
    from flask_scirpt import Manager
3.使用Manager管理app
manager = Manager(app)


8.flask中提供了两个核心功能,werkzueg + jinja2
jinja2就是用来做模板(html文件)渲染,使用的是render_template('页面',key=value,key2=value2)渲染


9.jinja2模板语法:
取变量的值:
    {{ 变量名 }}

分支语句if:
    {% if 条件A %}
        语句1;
    {% elif 条件B %}
        语句2;
    {% else %}
        语句3;
    {% endif %}

循环结构for:
{% for 变量名  in  容器 %}

{% endfor %}

注释:
{# 注释掉的内容 #}

为什么要使用模板:
1.视图函数只负责处理数据
2.模板只负责渲染数据
3.模板不仅仅可以通过视图函数携带数据渲染,还可以直接编写数据也行


10.过滤器:就是用来过滤需要的数据,jinja2中已经给我们提供了两种常见的过滤器(函数)
a.字符串过滤器
格式:{{ 字符串 | 字符串过滤器 }}
字符串过滤器种类有:
upper: 转大写
lower: 转小写
reverser: 反转
等等..

b.列表过滤器
格式:{{ 列表 | 列表过滤器 }}
列表过滤器:
first: 获取列表第一个元素
last: 列表最后一个元素
sum: 求列表和
sort:列表排序(从小到大)
等等


11.自定义过滤器,当系统提供的过滤器满足不了需要的时候就可以自定义
有两种方式:
a.先定义函数,然后再将函数添加到默认的列表过滤器就可以
    def test():
        pass

    app.add_template_filter(函数名称,'过滤器名称')


b.定义函数的时候,直接使用列表装饰器装饰
    @app.template_filter('过滤器名称')
    def test()
        pass


12.模板复用,有三种形式的复用
a. 宏的复用
b. 继承复用
c. 包含复用


13.宏(macro): 实际上相当于python中函数,提前定义好一段功能,需要的时候调用
定义格式:
    {% macro 宏名(参数) %}

    {% endmacro %}

在当前文件调用:
{{ 宏名(参数) }}

其他文件定义的,调用
{% import '宏文件名' as 别名 %}
{{ 别名.宏名(参数) }}

14.继承和包含
继承: 共性抽取, 代码复用,并且可以扩展子类自己的内容,更加灵活
格式: {% extends '文件名' %}

包含: 在一个文件中完全拥有另外一个文件的内容
格式: {% include '文件名' %}


父文件名定义,一般切割很多块:
{% block 模块名称 %}

{% endblock %}


15.jinja2中给提供了一些特殊的变量,不需要传递就可以使用
常用的有:
config: app的配置对象
request: 请求对象
url_for(): 方法,通过函数名称找路径
get_flashed_messages(): 消耗消息队列中的数据,也就是存储在flashed()里面的数据

flask随笔1

flask随笔1

flask随笔1

flask随笔1

flask随笔1

flask随笔1

flask随笔1

flask随笔1

flask随笔1

flask随笔1

flask随笔1

flask随笔1

flask随笔1

flask随笔1

flask随笔1

flask随笔1

flask随笔1

flask随笔1

flask随笔1

flask随笔1

flask随笔1

flask随笔1

flask随笔1

flask随笔1

flask随笔1

flask随笔1

flask随笔1

flask随笔1

flask随笔1

flask随笔1

flask随笔1

flask随笔1

flask随笔1

flask随笔1

flask随笔1

flask随笔1

 

相关文章:

猜你喜欢
  • 2021-06-22
  • 2021-09-26
  • 2022-12-23
  • 2021-06-07
  • 2021-12-07
相关资源
相似解决方案