首页 > 其他分享 >flask

flask

时间:2024-06-24 09:11:55浏览次数:3  
标签:__ return flask app request def

flask介绍

小而精,所有web开发需要的东西,借助于第三方集成

flask框架:Werkzeug WSGI工具包和Jinja2模板引擎

python-dotenv

# pip install python-dotenv
import os
from dotenv import load_dotenv
from dotenv import dotenv_values
## 1 加载配置文件
# 必须在根路径下新建一个 .env 的文件,并写入配置才能返回True,会把.env下的配置文件设置进环境变量
res=load_dotenv()  # take environment variables from .env
print(res)
print(os.environ.get('DOMAIN'))
# You will probably want to add .env to your .gitignore, especially if it contains secrets like a password.


## 2 获取环境变量字典
config = dotenv_values(".env")
print(config)
print(config.get('DOMAIN'))

watchdog

# pip install watchdog
# 当前目录下文件修改会被监控到,打印日志
import sys
import time
import logging
from watchdog.observers import Observer
from watchdog.events import LoggingEventHandler

if __name__ == "__main__":
    logging.basicConfig(level=logging.INFO,
                        format='%(asctime)s - %(message)s',
                        datefmt='%Y-%m-%d %H:%M:%S')
    path = sys.argv[1] if len(sys.argv) > 1 else '.'
    event_handler = LoggingEventHandler()
    observer = Observer()
    observer.schedule(event_handler, path, recursive=True)
    observer.start()
    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        observer.stop()
    observer.join()

虚拟环境

Mac/linux

# 创建虚拟环境
mkdir myproject
cd myproject
python3 -m venv .venv
# 激活虚拟环境
. .venv/bin/activate

Win

# 创建虚拟环境
mkdir myproject
cd myproject
py -3 -m venv .venv
# 激活虚拟环境
.venv\Scripts\activate

快速入门

安装

pip install Flask

运行flask项目

配置路由和视图函数对应关系--》基于装饰器

  • 方式一: python -m flask --app app名 run
# app1.py
from flask import Flask

app=Flask(__name__)

# @app.route('/',methods=['GET'])
@app.get('/')
def index():
    return 'hello flask'
  • 方式二: flask --app app名 run
# app2.py
from flask import Flask

app=Flask(__name__)

@app.get('/')
def index():
    return 'hello flask'

方式三: flask run --host=0.0.0.0

py文件必须叫app.py

# app.py
from flask import Flask

app=Flask(__name__)

@app.get('/')
def index():
    return 'hello flask'

方式四:使用pycharm快速运行 配置一个 flaskserver

from flask import Flask

app=Flask(__name__)

@app.get('/')
def index():
    return 'hello flask'

方式五:直接右键运行

from flask import Flask

app=Flask(__name__)

@app.get('/')
def index():
    return 'hello flask'

if __name__ == '__main__':
    app.run()

debug 模式

# 运行时,开启debug模式
flask --app hello run --debug

# debug模式
	-自动重启
  	-错误提示

基本使用

1 返回新手四件套

- 返回字符串--》return '字符串'
- 返回模板--》render_template('detail.html',info=user)
- 返回重定向--》redirect('/login')
- 返回json--》jsonify({'code':100,'msg':'成功'})

2 request对象

request对象,是全局的
from flask import  request

    request.method  提交的方法
    request.args  get请求提及的数据
    request.form   post请求提交的数据
    request.values  post和get提交的数据总和
    request.cookies  客户端所带的cookie
    request.headers  请求头
    request.path     不带域名,请求路径
    request.full_path  不带域名,带参数的请求路径
    request.script_root
    request.url           带域名带参数的请求路径
    request.base_url      带域名请求路径
    request.url_root      域名
    request.host_url      域名

3 前端传入的:请求体 请求参数

-请求体:request.form--->编码格式是 urlencoded
-请求参数:request.args-->路径后的  /home?name=qcc&age=22

4 渲染模板

-它比django更强大
-可以加括号
-字典可以.get   []
-for   {{}}  

5 session使用

-设置 app.secret_key='adsfa33w48855r434l'
- 设置值:session['username']
- 取值:session.get('username')

6 路由转换器

@app.get('/')
@app.route('/', methods=['GET'])
@app.route('/detail/<int:pk>', methods=['GET'])

7 登录认证装饰器

登录装饰器放下面

方式一:使用 装饰器 装饰 装饰器 @wraps(func)

from functools import wraps
# 用户登录,写个装饰器
def login_required(func):
    @wraps(func)
    def inner(*args, **kw):
        # 判断有没有登录
        if session.get('username'):
            res = func(*args, **kw)
            return res
        else:
            return redirect('/login')

    return inner

@app.route('/', methods=['GET'])
@login_required
def index():
    return render_template('index.html')

方式二: 给每个@app都指定别名( 添加唯一的endpoint值)

from functools import wraps
def login_required(func):
    def inner(*args, **kw):

        if session.get('username'):
            res = func(*args, **kw)
            return res
        else:
            return redirect('/login')

    return inner

@app.route('/', methods=['GET'],endpoint='index')
@login_required
def index():
    return render_template('index.html')

请求对象

# request.method  提交的方法
# request.args  get请求提及的数据
# request.form   post请求提交的数据
# request.values  post和get提交的数据总和
# request.cookies  客户端所带的cookie
# request.headers  请求头
# request.path     不带域名,请求路径
# request.full_path  不带域名,带参数的请求路径
# request.script_root  
# request.url           带域名带参数的请求路径
# request.base_url		带域名请求路径
# request.url_root      域名
# request.host_url		域名
# request.host			127.0.0.1:500
# request.files
# obj = request.files['the_file_name']
# obj.save('/var/www/uploads/' + secure_filename(f.filename))

响应对象

from flask import Flask, url_for, request,make_response,jsonify
from flask.views import MethodView, View

app = Flask(__name__)
app.debug = True


class IndexView(MethodView):
    def get(self):
        # 1 新手四件套:字符串,模板,重定向,json
        # 2 向cookie中写入数据
        res=make_response('get请求') # make_response 放四件套之一都可
        res.set_cookie('key','xxx',httponly=True,path='/')
        # 3 向响应头中写入数据
        res.headers['xxxx']='sss'
        return res

    def post(self):
        return 'post请求'



app.add_url_rule('/index', view_func=IndexView.as_view(name='xxx'))  #
if __name__ == '__main__':
    app.run()

请求扩展

flask中叫请求扩展---》本质作用实现像django中间件的作用一样

1 before_request

from flask import Flask

app=Flask(__name__)

# 1 请求来进视图函数之前执行
# 2 多个会从上往下依次执行
# 3 如果返回None,表示继续下一个
# 4 如果返回了四件套:表示结束,不继续往后走

@app.before_request
def before01():
    print('来了老弟')


@app.get('/')
def index():
    return 'ok'

if __name__ == '__main__':
    app.run()

2 after_request

from flask import Flask

app=Flask(__name__)

# 1 视图函数执行完,走
# 2 多个会从下往上依次执行
# 3 必须有返回值,是响应对象
# 4 处理跨域,再响应头中加--》就用它

@app.get('/')
def index():
    print('index')
    return 'ok'

@app.after_request
def before0(response):
    print('走了')
    return response

if __name__ == '__main__':
    app.run()

3 teardown_request

from flask import Flask

app=Flask(__name__)

# 1 无论视图函数执行成功或失败,都会走它
# 2 即便视图函数执行出异常, 也会走
# 3 一般用来记录日志

@app.get('/')
def index():
    print('index')
    return 'ok'

@app.teardown_request
def teardown(exc):
    # exc是视图函数错误对象--》记录错误日志
    print(exc)



if __name__ == '__main__':
    app.run()

4 errorhandler

from flask import Flask, jsonify

app=Flask(__name__)

@app.get('/')
def index():
    print('index')
    return 'ok'

# 1 监听http响应状态码
# 2 全局异常处理

@app.errorhandler(404)
def error_404(arg):
    return jsonify({'code':'xxx'})
@app.errorhandler(500)
def error_500(arg):
    return jsonify({'code':'500错误了'})


if __name__ == '__main__':
    app.run()

偏函数----提前传值

from functools import partial

def add(a,b,c):
    return a+b+c

res=add(1,2,3)
print(res)

res=partial(add,1)  # 提前传值
print(res(2,3))

蓝图(blueprint)

蓝图使用步骤:

1 蓝图类实例化得到一个对象

from flask import Blueprint
# 第一个参数是蓝图名
order_blue=Blueprint('order',__name__)

2 在视图函数上,使用蓝图注册路由-->蓝图也有请求扩展

@order_blue.before_request
def before():
   print('来了')

@order_blue.route('/order')
def order():
   return 'order-order-order'

3 在app中注册蓝图

app.register_blueprint(user_blue)

标签:__,return,flask,app,request,def
From: https://www.cnblogs.com/unrealqcc/p/18264311

相关文章

  • flask-session
    flask-session第三方flask-session,可以把session的内容保存在服务端安装并使用pip3installflask-session方式一fromflaskimportFlask,sessionfromflask_session.redisimportRedisSessionInterfaceimportredisapp=Flask(__name__)app.secret_key='adsfasd......
  • flask 闪现(flash)
    闪现(flash)flask中得闪现存放数据的地方,一旦取了,数据就没了实现跨请求间传递数据基本使用设置:flash('欢迎你')取:get_flashed_messages()fromflaskimportFlask,request,render_template,redirect,flash,get_flashed_messagesapp=Flask(__name__)app.debug......
  • flask cbv加装饰器
    cbv加装饰器fromflaskimportFlaskfromflask.viewsimportMethodViewapp=Flask(__name__)app.debug=True###登录认证--->不能公用--》要么只能给fbv用,要么只能给cbv用defauth(func):definner(*args,**kwargs):print(args)#cbv,会有第一个参......
  • flask 定制命令
    flask定制命令使用flask-script定制命令(老版本,不用了)#flask老版本中,没有命令运行项目,自定制命令#flask-script解决了这个问题:flask项目可以通过命令运行,可以定制命令1.x2.x#新版的flask--》官方支持定制命令click定制命令,这个模块就弃用了2.x3.x#fl......
  • Flask
    Flask1python界的web框架-Django:大而全,你要的东西都有[orm,缓存,认证] django-ninja-flask:小而精,所有web开发需要的东西,借助于第三方集成-web.py-----同步框架--进程线程架构--3.x以后支持异步--tornadosanicfastapi:高性能小而精,借助于第......
  • Flask新手入门(一)
    前言Flask是一个用Python编写的轻量级Web应用框架。它最初由ArminRonacher作为Werkzeug的一个子项目在2010年开发出来。Werkzeug是一个综合工具包,提供了各种用于Web应用开发的工具和函数。自发布以来,Flask因其简洁和灵活性而迅速受到开发者的欢迎。随着Python社区的增长,Fl......
  • python web框架哪家强?Flask、Django、FastAPI对比
    前言当你掌握了python的基础知识,并且会用和HTML和CSS编写简单的静态网页。现在你只需再掌握一个pythonweb框架的知识,就可以开始编写一个动态的网站了。目前市面比较流程的pythonweb框架有三个flask、Django、FastAPI。接下来我们对比一下。他们三个各自有什么特点。Flas......
  • 计算机毕业设计flask+python企业公司进销存管理系统
    1、内容和要求:(1)完成以下课题研究内容:①研究进销存系统相关理论、特征。②研究进销存系统背景和意义。③研究进销存系统现实发展前景。④对企业进销存系统进行需求分析。⑤设计和实现新疆世纪金桥企业进销存系统。⑥对设计的进销存系统进行测试。(2)完成......
  • [flask]统一API响应格式
    前言在设计API返回内容时,通常需要与前端约定好API返回响应体内容的格式。这样方便前端进行数据反序列化时相应的解析处理,也方便其它服务调用。不同公司有不同的响应内容规范要求,这里以常见的JSON响应体为例:{"code":200,"data":{"content":"thisis/a/1"......
  • flask-SQLAlchemy解决报错 Working outside of application context.
    尝试想要写自己的自动化测试框架,使用的是flask,想要使用SQLAlchemy实现数据库的模型映射,但是按照官方文档创建好module后执行时,会报错Workingoutsideofapplicationcontext.经过一番查找,存在flask的上下文问题,以下是解决过程官网案例:http://www.pythondoc.com/flask-sqlalche......