flask随笔1

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()里面的数据

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
校园悬赏任务平台对字典管理、论坛管理、任务资讯任务资讯公告管理、接取用户管理、任务管理、任务咨询管理、任务收藏管理、任务评价管理、任务订单管理、发布用户管理、管理员管理等进行集中化处理。经过前面自己查阅的网络知识,加上自己在学校课堂上学习的知识,决定开发系统选择小程序模式这种高效率的模式完成系统功能开发。这种模式让操作员基于浏览器的方式进行网站访问,采用的主流的Java语言这种面向对象的语言进行校园悬赏任务平台程序的开发,在数据库的选择上面,选择功能强大的Mysql数据库进行数据的存放操作。校园悬赏任务平台的开发让用户查看任务信息变得容易,让管理员高效管理任务信息。 校园悬赏任务平台具有管理员角色,用户角色,这几个操作权限。 校园悬赏任务平台针对管理员设置的功能有:添加并管理各种类型信息,管理用户账户信息,管理任务信息,管理任务资讯公告信息等内容。 校园悬赏任务平台针对用户设置的功能有:查看并修改个人信息,查看任务信息,查看任务资讯公告信息等内容。 系统登录功能是程序必不可少的功能,在登录页面必填的数据有两项,一项就是账号,另一项数据就是密码,当管理员正确填写并提交这二者数据之后,管理员就可以进入系统后台功能操作区。项目管理页面提供的功能操作有:查看任务,删除任务操作,新增任务操作,修改任务操作。任务资讯公告信息管理页面提供的功能操作有:新增任务资讯公告,修改任务资讯公告,删除任务资讯公告操作。任务资讯公告类型管理页面显示所有任务资讯公告类型,在此页面既可以让管理员添加新的任务资讯公告信息类型,也能对已有的任务资讯公告类型信息执行编辑更新,失效的任务资讯公告类型信息也能让管理员快速删除。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值