Flask精华总结,基于博客论坛,持续更新

您所在的位置:网站首页 flask制作登录方式 Flask精华总结,基于博客论坛,持续更新

Flask精华总结,基于博客论坛,持续更新

2023-05-17 19:38| 来源: 网络整理| 查看: 265

Flask精华总结,基于博客论坛 1.Flask简介

​ Flask是一个轻量级的可定制框架,使用Python语言编写,较其他同类型框架更为灵活、轻便、安全且容易上手。它可以很好地结合MVC模式进行开发,开发人员分工合作,小型团队在短时间内就可以完成功能丰富的中小型网站或Web服务的实现。另外,Flask还有很强的定制性,用户可以根据自己的需求来添加相应的功能,在保持核心功能简单的同时实现功能的丰富与扩展,其强大的插件库可以让用户实现个性化的网站定制,开发出功能强大的网站。

​ Flask是目前十分流行的web框架,采用Python编程语言来实现相关功能。它被称为微框架(microframework),“微”并不是意味着把整个Web应用放入到一个Python文件,微框架中的“微”是指Flask旨在保持代码简洁且易于扩展,Flask框架的主要特征是核心构成比较简单,但具有很强的扩展性和兼容性,程序员可以使用Python语言快速实现一个网站或Web服务。一般情况下,它不会指定数据库和模板引擎等对象,用户可以根据需要自己选择各种数据库。Flask自身不会提供表单验证功能,在项目实施过程中可以自由配置,从而为应用程序开发提供数据库抽象层基础组件,支持进行表单数据合法性验证、文件上传处理、用户身份认证和数据库集成等功能。Flask主要包括Werkzeug和Jinja2两个核心函数库,它们分别负责业务处理和安全方面的功能,这些基础函数为web项目开发过程提供了丰富的基础组件。Werkzeug库十分强大,功能比较完善,支持URL路由请求集成,一次可以响应多个用户的访问请求;支持Cookie和会话管理,通过身份缓存数据建立长久连接关系,并提高用户访问速度;支持交互式Javascript调试,提高用户体验;可以处理HTTP基本事务,快速响应客户端推送过来的访问请求。Jinja2库支持自动HTML转义功能,能够很好控制外部黑客的脚本攻击。系统运行速度很快,页面加载过程会将源码进行编译形成Python字节码,从而实现模板的高效运行;模板继承机制可以对模板内容进行修改和维护,为不同需求的用户提供相应的模板。

2.路由和请求响应对象 装饰器其实就是将rule字符串跟视图函数进行了绑定,通过add_url_rule()实现的绑定。 @app.route('/index') def index(): return 'welcome everyone!'

等效

def index(): return 'welcome everyone!' app.add_url_rule('/index', view_func=index) 路由变量规则

string (缺省值) 接受任何不包含斜杠的文本 * int 接受正整数 * float 接受正浮点数 path 类似 string ,但可以包含斜杠 uuid 接受 UUID 字符串

@app.route('/index/') def get_path(p): print('******>', type(p)) # str类型 print(p) return p @app.route('/test/') # 必须传递uuid的格式,uuid模块, uuid.uuid4() ---->UUID类型 def test(uid): print('#######>>>>>', type(uid)) return '获取唯一的标识码' # 所有的路由搜索规则都是自上而下搜索,在写路由的是有定义的路由是唯一的。 @app.route('/projects') # 请求路由中如果添加了/:http://127.0.0.1:5000/about/ 显示Not Found def about(): return 'The about page' @app.route('/projects/') # 路由中定义'/',无论请求的URL是否带有/,都可以执行视图函数。如果请求的是有/,浏览器做了一次重定向 def projects(): return 'The project page' 视图

返回值:其实返回值返回的都是一个响应对象。

视图函数的返回值: response响应: 1.str 自动转成response对象 2.dict json 3.response对象 response对象 4.make_response() response对象 5.redirect() 重定向 302状态码 6.render_template() 模板渲染 + 模板

response响应对象

print(response.content_type) print(response.headers) print(response.status_code) # 200 print(response.status) # 200 OK response.set_cookie('name','wxy')

request请求对象:只需要导入,通过from flask import request 导入之后可以获取对象的属性和方法 属性:

print(request.headers) # request对象 对象访问属性,也可以调用方法 print(request.path) print(request.full_path) print(request.base_url) print(request.url) 获取提交的数据

跟请求方法相关的

get: request.args 底层是字典的形式 主要获取get提交的请求参数 如果是get请求格式是这个样子的:/register2?username=zhangsan&address=Beijing 此时的username是form表单中表单元素的name值

print(request.args.get('username')) # 获取值 print(request.args.get('address'))

post: request.form 底层是字典的形式 主要获取post提交的请求参数 注意post提交必须在路由中进行设置,通过methods = [‘GET’,‘POST’] 按照此种形式: @app.route(‘/register2’, methods=[‘GET’, ‘POST’]) def register2(): # 获取页面提交的内容 … 内容省略 获取数据: print(request.form) # 如果请求方法是post则需要通过request.form取值

print(request.form.get('username')) print(request.form.get('address'))

定制响应头

response = make_response(content) # 返回值就是一个response对象 # 定制响应头 response.headers['mytest'] = '123abc' response.headers['myhello'] = 'hellohello' # 将定制好的response返回 return response 3.模板

模板的语法:

传参

在模板中获取view中传递的变量值:{{ 变量名key }}

render_template(‘模板名字’,key=value,key=value)

name = '沈凯' # str age = 18 # int friends = ['建义', '陈璟', '小岳岳', '郭麒麟'] # list dict1 = {'gift': '大手镯', 'gift1': '鲜花', 'gift2': '费列罗'} # dict # 创建对象 girlfriend = Girl('美美', '安徽阜阳') # 自定义的类构建的类型:Girl对象

模板: {{ list.0 }} 同 {{ list[0] }} {{ dict.key }} 同 {{ dict.get(key) }} {{ girl.name }} 同 {{ 对象.属性 }}

控制块

{% if 条件 %}

{% endif %}

{% if 条件 %} 条件为True {% else %} 条件为False {% endif %}

{% for 变量 in 可迭代的对象 %} for循环要做的任务

{% endfor %}

在for循环里面可以使用loop变量

loop.index 序号从1开始 loop.index0 序号从0开始

loop.revindex reverse 序号是倒着的 loop.revindex0

loop.first 布尔类型 是否是第一行,是则返回TRUE loop.last 布尔类型 是否是第二行

{%for user in users%} ff loop.index H {{ user.username }} {i user.password H {{ user.addr H} ii user.phone } {%endfor%} 过滤器

过滤器的本质就是函数 模板语法中过滤器: {{ 变量名 | 过滤器(*args) }}

{{ 变量名 | 过滤器 }}

常见的过滤器: 1。 safe : 禁用转译 msg = '520快乐!' return render_template(‘show_2.html’, girls=girls, users=users, msg=msg) 不想让其转译: {{ msg | safe }} 2。 capitalize:单词的首字母大写 {{ n1 | capitalize }} 3。lower和upper 大小写的转换 4。title 一句话中每个单词的首字母大写 msg = ‘She is a beautiful girl’ {{ msg | title}} 5。reverse 翻转 {{ n1 | reverse}} 6。format {{ ‘%s is %d years old’ | format(‘lily’,18) }} 7.truncate 字符串截断

list的操作: {# 列表过滤器的使用 #} {{ girls | first }} {{ girls | last }}{ girls | sum }} 整型的计算 #} {{ [1,3,5,7,9] | sum }} {{ [1,8,5,7,3] | sort }}

dict: {% for v in users.0.values() %} ---->获取值

{{ v }}

{% endfor %}

{% for k in users.0.keys() %} ----》获取键

{{ k }}

{% endfor %}

{% for k,v in users.0.items() %} —》获取键值

​ {{ k }}—{{ v }}

​ {% endfor %}

自定义过滤器

​ 过滤器本质就是函数

通过flask模块中的add_template_filter方法 a. 定义函数,带有参数和返回值 b. 添加过滤器 app.add_template_filter(function,name=‘’) c. 在模板中使用: {{ 变量 | 自定义过滤器 }}

使用装饰器完成 a. 定义函数,带有参数和返回值 b. 通过装饰器完成,@app.template_filter(‘过滤器名字’)装饰步骤一的函数 c. 在模板中使用: {{ 变量 | 自定义过滤器 }}

模板继承

需要模版继承的情况: 1。 多个模板具有完全相同的顶部和底部 2。 多个模板具有相同的模板内容,但是内容中部分不一样 3。 多个模板具有完全相同的模板内容

标签: {% block 名字 %}

{% endblock %}

1.定义父模板 2.子模板继承父模板 步骤: 父模板: 1。 定义一个base.html的模板 2。 分析模板中哪些是变化的比如:{% block title %}父模板的title{% endblock %} 对变化的部分用block进行"预留位置"也称作:挖坑 3。注意:样式和脚本 需要提前预留 {% block mycss %}{% endblock %} {% block myjs %}{% endblock %}

extends继承

1。 {% extends ‘父模板的名称’ %}将父模板继承过来 2。 找到对应的block(坑)填充,每一个block都是有名字的。

include包含

在A,B,C页面都共同的部分,但是其他页面没有这部分。 这个时候考虑使用include 步骤: 1。先定义一个公共的模板部分,xxx.html 2。谁使用则include过来, {% include ‘文件夹/xxx.html’ %}

宏macro

1。把它看作是jinja2的一个函数,这个函数可以返回一个HTML字符串 2。目的:代码可以复用,避免代码冗余

​ 定义两种方式: ​ 1。在模板中直接定义: ​ 类似: macro1.html 中定义方式 ​ 2。将所有宏提取到一个模板中:macro.html 谁想使用谁导入: {% import ‘macro.html’ as xxx %} {{ xxx.宏名字(参数) }}

{% macro form(action,value='登录',method='post') %}


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3