首页 > 编程语言 >Flask-----轻量级的框架,快速的搭建程序(python)

Flask-----轻量级的框架,快速的搭建程序(python)

时间:2023-06-01 11:33:06浏览次数:59  
标签:__ return 请求 Flask app request python 轻量级

 Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后触发Flask框架,开发人员基于Flask框架提供的功能对请求进行相应的处理,并返回给用户,如果要返回给用户复杂的内容时,需要借助jinja2模板来实现对模板的处理,即:将模板和数据进行渲染,将渲染后的字符串返回给用户浏览器。

“微”(micro) 并不表示你需要把整个 Web 应用塞进单个 Python 文件(虽然确实可以 ),也不意味着 Flask 在功能上有所欠缺。微框架中的“微”意味着 Flask 旨在保持核心简单而易于扩展。Flask 不会替你做出太多决策——比如使用何种数据库。而那些 Flask 所选择的——比如使用何种模板引擎——则很容易替换。

默认情况下,Flask 不包含数据库抽象层、表单验证,或是其它任何已有多种库可以胜任的功能。然而,Flask 支持用扩展来给应用添加这些功能,如同是 Flask 本身实现的一样。众多的扩展提供了数据库集成、表单验证、上传处理、各种各样的开放认证技术等功能。Flask 也许是“微小”的,但它已准备好在需求繁杂的生产环境中投入使用。

复制代码
pip3 install flask
#Flask依赖一个实现wsgi协议的模块:werkzeug
from werkzeug.wrappers import Request, Response

@Request.application
def hello(request):
    return Response('Hello World!')

if __name__ == '__main__':
    from werkzeug.serving import run_simple
    run_simple('localhost', 4000, hello)

Django:无socket,依赖第三方模块wsgi,中间件,路由系统(CBV,FBV),视图函数,ORM。cookie,session,Admin,Form,缓存,信号,序列化。。
Flask:无socket,中间件(需要扩展),路由系统,视图(CBV)、第三方模块(依赖jinja2),cookie,session弱爆了

简单的Flask程序
示例
flask项目的基本目录结构:
flask项目名
|_____static #静态文件的存放目录
|_____templates #模板的存放目录
|_____项目名.py #主项目
|_____config.py #配置文件

#例:
#项目名.py
from flask import Flask

app = Flask(__name__) #app是程序实例,一个项目只能有一个程序实例

@app.route('/') #路由装饰器
def hello_world(): #视图函数
return 'Hello World!'

if __name__ == '__main__':
app.run() #有个host参数,代表监听范围,默认为127.0.0.1,只监听本机,0.0.0.0表示监听所有公网ip

​ @app.route()装饰器,可以将函数变为视图函数,他的参数为路由。

使用Flask-Script支持命令行选项
​ flask的开发web服务器支持很多选项,但只能在脚本中作为参数传给app.run()函数,然而传递设置选项的理想方式是使用命令行参数。Flask-Script是一个Flask的扩展,为Flask程序添加了一个命令行解析器。

#安装:pip install flask-script
#hello.py
from flask import Flask
from flask_script import Manager

app = Flask(__name__)
manager = Manager(app) #实例化拓展

@app.route('/')
def hello_world():
return 'Hello World!'

if __name__ == '__main__':
manager.run() 启动实例

​ 修改代码后,使用命令行启动程序(python hello.py runserver)时就可以添加参数了: –host/-h 客户端访问web服务的ip

​ –port/-p web服务的端口

​ -d 开启debug

​ -r 自动reload,当代码发生变化时自动重启

​ –threaded 开启多线程

​ -?/–help 查看帮助信息

使用配置文件
​ 将工程配置下写在配置文件中,利于以后的开发维护管理。

#config.py
DEBUG = True #设置工程为开发者
'''
其他配置参数,如数据库的配置等等
'''


#工程文件
import config
app.config.from_objec(config) #将配置文件配置到项目文件中

路由
路由传递参数:app.route('/index/\<arg1>')

​ 参数放在尖括号里,可以设置参数的类型,int, float,path(/将不再是路径分隔符),如:\<int:arg1>,

url重定向:redirect('\<跳转的路由>')

解析路由:url_for(视图函数名),在模板中页面跳转也可以使用url_for()解析得到路由,放在{{ }}中

@app.route('/index/') #普通路由
def index():
return 'hello world'

@app.route('/add/<int:arg1>/<int:arg2>') #带参数的路由
def add(ag1, arg2):
return 'arg1 +arg2 = {}'.format(arg1+arg2)

@app.route('/hello')
def hello():
return rendirect(url_for('index')) #路由重定向和重定向一起使用

2. 请求与响应
Flask上下文全局变量
变量名 上下文 说明
current_app 程序上下文 当前激活程序的程序实例
g 程序上下文 处理请求时用作临时存储的对象,每次请求都会重设这个变量。
request 请求上下文 请求对象,封装了客户端发送的HTTP请求中的内容
session 请求上下文 用户会话,用于存储请求之间需要记住的值的词典
​ Flask在分发请求之前激活(或推送)程序和请求上下文,请求处理完成后再将其删除。程序上下文被推送后,就可以在线程中使用current_app和g变量。类似地,请求上下文被推送后,就可以使用request和session变量。如果使用这些变量时我们没有激活程序上下文或请求上下文,就会导致报错。

request:请求对象
​ 封装了客户端发送的HTTP请求中的内容。

​ request.headers 请求头信息,数据类型为类字典结构,可以使用.get(”)获取数据。

#例:
@app.route('/request/')
def req():
# 完整的请求URL
#return request.url
# 基本路由信息,不包含get参数
#return request.base_url
# 只包含主机和端口
#return request.host_url
# 只包含装饰器中的路由地址
#return request.path
# 请求方法类型
#return request.method
# 客户端IP地址
#return request.remote_addr
# 所有的请求参数(GET)
#return request.args['page']
# 请求头信息
return request.headers['User-Agent']

response:响应对象
​ 响应的两种方法:

视图函数直接返回一个元组:(response, status, headers)

视图函数返回一个make_response(键,值)函数产生的响应对象。

Cookies:
访问:通过请求对象的cookies属性访问(请求对象的cookies属性是一个内容为客户端提提交的所有cookies的字典)

设置cookies:通过响应对象的set_cookies方法来设置Cookies。

from flask import Flask, request, make_response

@app.route('/cookies/')
def cookies():
cook = request.cookies #获得cookies
resp = make_response('set cookies') #实例一个响应对象
resp.set_cookies('name','Tom') #设置cookies
return resp

session:
设置session
#设置秘钥:使用session就必须设置密码,以便用来对数据加密
app.config['SECRET_KEY'] = '随便什么字符串'


@app.route('/set_sesion/')
def set_session():
session['user-name'] = 'hello'
return '设置成功'

获取session
@app.route('/get_session/')
def get_session():
return session.get('username', 'who?')

请求钩子
​ 4种钩子装饰器:

before_first_request:在处理第一个请求之前执行
before_request:在每次请求之前运行。
after_request:如果没有未处理的异常抛出在,在每次请求之后执行
teardown_request:即使有未处理的异常抛出,也在每次请求之后运行。

标签:__,return,请求,Flask,app,request,python,轻量级
From: https://www.cnblogs.com/kn-zheng/p/17448482.html

相关文章

  • Python装饰器
    Python装饰器是一种语法糖,用于修改函数或类的行为,而无需修改其源代码。装饰器是一个可以接受函数或类作为参数,并返回一个新函数或类的函数。它可以用于添加功能,比如缓存、日志、计时等,或者改变函数或类的行为,比如限制访问、检查参数、实现单例等。装饰器通常定义为一个函数,该函数......
  • python中的logger模块
    logger提供了应用程序可以直接使用的接口handler将(logger创建的)日志记录发送到合适的目的输出filter提供了细度设备来决定输出哪条日志记录formatter决定日志记录的最终输出格式logging模块介绍logger提供了应用程序可以直接使用的接口handler将(logger创建的)日志记录发送......
  • python读取配置文件
    配置文件作为一种可读性很好的格式,非常适用于存储程序中的配置数据。在每个配置文件中,配置数据会被分组(比如“config”和“cmd”)。每个分组在其中指定对应的各个变量值。如下:#定义config分组[config]platformName=AndroidappPackage=com.romweappActivity=com.romwe.Spl......
  • 【Python】redis 模块_Key-Value 数据库
    RedisRedis是一个开源的基于内存也可持久化的Key-Value数据库,采用ANSIC语言编写。它拥有丰富的数据结构,拥有事务功能,保证命令的原子性。由于是内存数据库,读写非常高速,可达10w/s的评率,所以一般应用于数据变化快、实时通讯、缓存等。但内存数据库通常要考虑机器的......
  • Python特点
    1.易于学习:Python有相对较少的关键字,结构简单,和一个明确定义的语法,学习起来更加简单。2.易于阅读:Python代码定义的更清晰。3.易于维护:Python的成功在于它的源代码是相当容易维护的。4.一个广泛的标准库:Python的最大的优势之一是丰富的库,跨平台的,在UNIX,Windows和Macintosh兼容很好。......
  • python dig trace 功能实现——通过Querying name server IP来判定是否为dns tunnel
    dnstunnel确认方法,查询子域名最终的解析地址:使用方法:pythondig_trace.py "<7cf1e56b67fc90f8caaae86e0787e907>.nsconcreteblock.info"anySelectedrootnameserver: 192.203.230.10['.','info.','nsconcreteblock.info.','<......
  • python compileall 打包发布
    Python工程的编译、合并、打包、发布 确保要发布的包(demo)的根目录中有__main__.py文件,这个是程序执行入口。编译python3-O-mcompilealldemo批量改名.pyc文件find.-name'*.pyc'-execrename's/.cpython-35.opt-1//'{}\;移动.pyc文件find.-name'*.pyc'-execdirmv......
  • Python 中的 requirement.txt
    目录1.如何使用?requirement.txt导出2.环境混用怎么办?Python也需要维护项目相关的依赖包。通常我们会在项目的根目录下放置一个requirement.txt文件,用于记录所有依赖包和它的确切版本号。requirement.txt的内容长这样:alembic==1.0.10appnope==0.1.0astroid==2.2.5attrs=......
  • python~Flask框架建立web应用
    通过python来开发web应用,可以产简化了web开发的流程,功能和函数库也是非常丰富,我们也是开箱即用,目前比较流程的WEB框架就是Flask和django。根据2020年JetBrainsPython开发人员调查,Django和Flask是迄今为止最受欢迎的两个PythonWeb框架。考虑到Web开发行业在过去五年左右的时间......
  • python neo4j将新节点连接到旧标签
    要在Python中使用py2neo将新节点连接到已存在的节点标签,你可以执行以下步骤:导入所需的类和函数:frompy2neoimportGraph,Node,Relationship连接到Neo4j数据库:graph=Graph("bolt://localhost:7687",auth=("username","password"))确保将"username"和&q......