Python编程:Flask入门到精通(2)

简介: Python编程:Flask入门到精通(2)

请求钩子hook

类似Django中的中间件


1、处理第一个请求前执行
@app.before_first_request  
def handle():
    pass
2、处理每个请求前执行
@app.before_request  
def handle():
    pass
3、处理每个请求后执行,视图函数没有出现异常执行
@app.after_request  
def handle(response):
    return response
4、处理每个请求后执行,视图函数是否出现异常都执行, 非调试模式debug=False
@app.teardown_request 
def handle(response):
    return response

使用

python app.py runserver -h 0.0.0.0 -p 8000

python app.py shell


jinja2模板

1、渲染


from flask import render_template
data = {
    "name": "python",
    "age": 18,
    "my_dict": {"city": "beijing"},
    "my_list": [1, 2, 3, 4, 5],
}
render_template("index.html", **data)

变量 {{ name }}

字典 {{ my_dict.city }} {{ my_dict[“city”] }}

列表 {{ my_list[0] }}

数字相加 {{ 1 + 2 }}

字符串拼接 {{ “hello” + “world” }}


2、 字符串过滤器(支持链式调用 )

safe 禁用转义 xss攻击

capitalize 首字母大写,其他小写

lower 转小写

upper 转大写

title 每个单词首字母大写

trim 首尾空格去掉

reverse 反转字符串

format 格式化输出(类似%格式化)

striptags 删除html标签


3、列表过滤器

first 取第一个元素

last 取最后一个元素

length 获取列表长度

sum 列表求和

sort 列表排序


4、自定义过滤器

方式一:


(1)定义过滤器
def list_step_2(lst):
    return lst[::2]
(2)注册过滤器
app.add_template_filter(list_step_2, "list_step_2")
(3)使用过滤器
{{ lst | list_step_2 }}

方式二:


@app.template_filter("list_step_2") 
def list_step_2(lst):
    return lst[::2]

模板宏macro

1、不带参数宏


{% macro input() %}
<input type="text" >
{% endmacro %}
{{ input() }}

2、带参数宏


{% macro input(type) %}
<input type="{{type}}" >
{% endmacro %}

3、带默认参数宏


{% macro input(type="text") %}
<input type="{{type}}" >
{% endmacro %}

4、导入宏


{% import "macro.html" as my_macro%}
{{ my_macro.input() }}

模板继承

bash.html

{% block top%}
父模板的内容
{% endblock %}

child.html

{% extends "bash.html" %}
{% block top%}
子模板的内容
{% endblock %}

模板包含

{% inclued "hello.html" %}

Flask中的特殊变量

可以直接在模板中使用

config

request

url_for

get_flashed_messages基于session


from flask import flash
flash("hello1")
flash("hello2")
{% for msg in get_flashed_messages() %}
    {{msg}}
{% endfor %}

Flask-Script扩展

pip install Flask-Script


Manager 启动命令管理类


from flask import Flask
from flask_script import Manager
app = Flask(__name__)
#创建app管理类
manager = Manager(app)
@app.route("/")
def index():
    pass
if __name__ == "__main__":
    # app.run()
    manager.run()

表单扩展

pip install Flask-WTF

可以进行csrf验证 表单生成 和 验证


Flask数据库扩展

pip install Flask-SQLAlchemy


Flask数据库迁移扩展

pip install Flask-Script (依赖)
pip install Flask-Migrate

Flask发送邮件

pip install Flask-Mail


循环导入-死锁

解决:一方让步,延迟导入


路由设置的方式


1、装饰器
@app.route("/")
def view():
    pass
2、装饰器原始方式
def view():
    pass
app.route("/")(view)

蓝图Blueprint

一个小模块的抽象概念, 延迟加载


1、定义蓝图


# __init__.py
from flask import Blueprint
 # 工程目录的优先级大于应用目录
app_user = Blueprint("app_user", __name__, template_folder="templates")
 # init执行的时候把视图加载进来
 from .views import view

2、定义视图


# views.py
from . import app_user
@app_user.route("/")
def view():
    pass

3、注册蓝图


# main.py
from flask import Flask
app = Flask(__name__)
app.register_blueprint(app_user, url_prefix="/user")

4、查看路由

app.url_map


单元测试

web开发阶段:

需求分析,设计阶段,实现阶段,测试阶段


测试阶段

单元测试,集成测试,系统测试


断言assert

-真 继续执行

-假 抛出异常 AssertionError


Flask单元测试

app.test_client()


测试数据库

开启->测试->断开


Flask部署


pip install gunicorn

gunicorn 
-w 4  // 进程数
-b 127.0.0.1:5000  // 开启端口
--access-logfile ./logs  //日志文件
-D // 守护进程方式运行
main:app  // 要运行的程序入口

ps aux|grep gunicorn


Nginx

负载均衡

静态文件


cp nginx.conf nginx.conf.bak


upstream flask{
    server 10.0.0.1:5000;
    server 10.0.0.1:5001;
}
server{
    listion 80;
    server_name localhost;
    location / {
        proxy_pass http://flask;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr
    }

平滑重启 nginx -s reload


mysql异常

@@tx_isolation


修改报错文件base.py

# cursor.execute("SELECT @@tx_isolation")
if self.server_version_info < (5, 7, 20):
    cursor.execute("SELECT @@tx_isolation")
else:
    cursor.execute("SELECT @@transaction_isolation")
相关文章
|
16天前
|
人工智能 数据可视化 数据挖掘
探索Python编程:从基础到高级
在这篇文章中,我们将一起深入探索Python编程的世界。无论你是初学者还是有经验的程序员,都可以从中获得新的知识和技能。我们将从Python的基础语法开始,然后逐步过渡到更复杂的主题,如面向对象编程、异常处理和模块使用。最后,我们将通过一些实际的代码示例,来展示如何应用这些知识解决实际问题。让我们一起开启Python编程的旅程吧!
|
14天前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。
|
3天前
|
Unix Linux 程序员
[oeasy]python053_学编程为什么从hello_world_开始
视频介绍了“Hello World”程序的由来及其在编程中的重要性。从贝尔实验室诞生的Unix系统和C语言说起,讲述了“Hello World”作为经典示例的起源和流传过程。文章还探讨了C语言对其他编程语言的影响,以及它在系统编程中的地位。最后总结了“Hello World”、print、小括号和双引号等编程概念的来源。
97 80
|
1天前
|
分布式计算 大数据 数据处理
技术评测:MaxCompute MaxFrame——阿里云自研分布式计算框架的Python编程接口
随着大数据和人工智能技术的发展,数据处理的需求日益增长。阿里云推出的MaxCompute MaxFrame(简称“MaxFrame”)是一个专为Python开发者设计的分布式计算框架,它不仅支持Python编程接口,还能直接利用MaxCompute的云原生大数据计算资源和服务。本文将通过一系列最佳实践测评,探讨MaxFrame在分布式Pandas处理以及大语言模型数据处理场景中的表现,并分析其在实际工作中的应用潜力。
14 2
|
15天前
|
小程序 开发者 Python
探索Python编程:从基础到实战
本文将引导你走进Python编程的世界,从基础语法开始,逐步深入到实战项目。我们将一起探讨如何在编程中发挥创意,解决问题,并分享一些实用的技巧和心得。无论你是编程新手还是有一定经验的开发者,这篇文章都将为你提供有价值的参考。让我们一起开启Python编程的探索之旅吧!
41 10
|
15天前
|
测试技术 开发者 Python
探索Python中的装饰器:从入门到实践
装饰器,在Python中是一块强大的语法糖,它允许我们在不修改原函数代码的情况下增加额外的功能。本文将通过简单易懂的语言和实例,带你一步步了解装饰器的基本概念、使用方法以及如何自定义装饰器。我们还将探讨装饰器在实战中的应用,让你能够在实际编程中灵活运用这一技术。
36 7
|
14天前
|
人工智能 数据挖掘 开发者
探索Python编程之美:从基础到进阶
本文是一篇深入浅出的Python编程指南,旨在帮助初学者理解Python编程的核心概念,并引导他们逐步掌握更高级的技术。文章不仅涵盖了Python的基础语法,还深入探讨了面向对象编程、函数式编程等高级主题。通过丰富的代码示例和实践项目,读者将能够巩固所学知识,提升编程技能。无论你是编程新手还是有一定经验的开发者,这篇文章都将为你提供有价值的参考和启示。让我们一起踏上Python编程的美妙旅程吧!
|
15天前
|
机器学习/深度学习 人工智能 算法
深度学习入门:用Python构建你的第一个神经网络
在人工智能的海洋中,深度学习是那艘能够带你远航的船。本文将作为你的航标,引导你搭建第一个神经网络模型,让你领略深度学习的魅力。通过简单直观的语言和实例,我们将一起探索隐藏在数据背后的模式,体验从零开始创造智能系统的快感。准备好了吗?让我们启航吧!
42 3
|
关系型数据库 数据库 开发工具
利用Flask + python3.6+MYSQL编写一个简单的评论模块。
利用flask + python3.6+MYSQL编写一个简单的评论模块。输入内容提交后,会显示在页面上。 发送并接受评论框的数据 在falsk返回首页的函数前,加入methods属性。 @app.route("/", methods=["GET", "POST"]) 两种接收数据的方式 暂时性的保存,并显示在网页上.in-memory storage 主程序如下,每当程序reload时候,comments会被初始化。
2708 0
|
27天前
|
JSON 前端开发 API
使用Python和Flask构建简易Web API
使用Python和Flask构建简易Web API
下一篇
DataWorks