首页 > 其他分享 >Flask基础

Flask基础

时间:2024-04-18 20:34:18浏览次数:26  
标签:index return Flask request app 基础 url

一、 简介
1、 框架介绍
Flask是一个基于Python并且依赖于Jinja2模板引擎和Werkzeug WSGI 服务的一个微型框架
WSGI :Web Server Gateway Interface(WEB服务网关接口),定义了使用python编写的web app与web server之间接口格式

其他类型框架:

Django:比较“重”的框架,同时也是最出名的Python框架。包含了web开发中常用的功能、组件的框架(ORM、Session、Form、Admin、分页、中间件、信号、缓存、ContenType…),Django是走大而全的方向,最出名的是其全自动化的管理后台:只需要使用起ORM,做简单的对象定义,它就能自动生成数据库结构、以及全功能的管理后台。

Tornado:大特性就是异步非阻塞、原生支持WebSocket协议;

Flask: 一个轻量级的基于 Python 的 Web 框架

Bottle:是一个简单高效的遵循WSGI的微型python Web框架。说微型,是因为它只有一个文件,除Python标准库外,它不依赖于任何第三方模块。

2、 架构模式
Flask的架构模式-MTV

经典三层结构 :MVC模式
M :Models ,模型层,负责数据库建模
V :Views,视图层,用于处理用户显示的内容,如 :html
C :Controller,控制器,处理与用户交互的部分内容。处理用户的请求并给出响应
python常用:MTV模式
M :Models ,模型层,负责数据库建模
T :Templates ,模板层,用于处理用户显示的内容,如:html
V :Views ,视图层,处理与用户交互的部分内容。处理用户的请求并给出响应

3、 环境搭建

安装

pip install flask

在app.py中添加

from flask import Flask

app = Flask(name)

@app.route('/') # Flask路由
def hello_world():
return 'Hello World!'

if name == 'main':
app.run() # 运行网站

主程序会默认访问templates和static文件夹,如果,存放web文件的文件夹名称不是这两个,那么要在实例化Flask路由时,声明

flask中文网:https://flask.net.cn/

框架之配置

flask中的配置文件是一个flask.config.Config对象(继承字典),默认配置为:

{
'DEBUG': get_debug_flag(default=False), # 是否开启Debug模式
'TESTING': False, # 是否开启测试模式
'PROPAGATE_EXCEPTIONS': None,
'PRESERVE_CONTEXT_ON_EXCEPTION': None,
'SECRET_KEY': None,
'PERMANENT_SESSION_LIFETIME': timedelta(days=31),
'USE_X_SENDFILE': False,
'LOGGER_NAME': None,
'LOGGER_HANDLER_POLICY': 'always',
'SERVER_NAME': None,
'APPLICATION_ROOT': None,
'SESSION_COOKIE_NAME': 'session',
'SESSION_COOKIE_DOMAIN': None,
'SESSION_COOKIE_PATH': None,
'SESSION_COOKIE_HTTPONLY': True,
'SESSION_COOKIE_SECURE': False,
'SESSION_REFRESH_EACH_REQUEST': True,
'MAX_CONTENT_LENGTH': None,
'SEND_FILE_MAX_AGE_DEFAULT': timedelta(hours=12),
'TRAP_BAD_REQUEST_ERRORS': False,
'TRAP_HTTP_EXCEPTIONS': False,
'EXPLAIN_TEMPLATE_LOADING': False,
'PREFERRED_URL_SCHEME': 'http',
'JSON_AS_ASCII': True,
'JSON_SORT_KEYS': True,
'JSONIFY_PRETTYPRINT_REGULAR': True,
'JSONIFY_MIMETYPE': 'application/json',
'TEMPLATES_AUTO_RELOAD': None,
}

方式一:

app.config['DEBUG'] = True # PS: 由于Config对象本质上是字典,所以还可以使用app.config.update(...)

方式二:

app.config.from_pyfile("python文件名称")
"""
如:
settings.py
DEBUG = True

        app.config.from_pyfile("settings.py")

"""
app.config.from_envvar("环境变量名称") # 环境变量的值为python文件名称名称,内部调用from_pyfile方法

app.config.from_json("json文件名称") # JSON文件名称,必须是json格式,因为内部会执行json.loads

app.config.from_mapping({'DEBUG':True}) # 字典格式

app.config.from_object("python类或类的路径") # 传入一个类
"""
如:
app.config.from_object('pro_flask.settings.TestingConfig')
settings.py
class Config(object):
DEBUG = False
TESTING = False
DATABASE_URI = 'sqlite://:memory:'

        class ProductionConfig(Config):
            DATABASE_URI = 'mysql://user@localhost/foo'

        class DevelopmentConfig(Config):
            DEBUG = True

        class TestingConfig(Config):
            TESTING = True

    PS: 从sys.path中已经存在路径开始写
PS: settings.py文件默认路径要放在程序root_path目录,如果instance_relative_config为True,则就是instance_path目录

框架之路由
2.1 添加路由

第一种

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

第二种

def index():
return "index"

app.add_url_rule("/index", None, index)

2.2 反向生成
from flask import Flask, url_for, redirect

app = Flask(name)

@app.route('/')
def hello_world():
index_ = url_for("i") # 返回i对应的路由
print(index_) # 可以进行重定向
return redirect(index_) # 进行重定向

@app.route("/index/asdhjaskdg/sad", endpoint="i") # endpoint默认为函数名
def index():
return "index"

if name == 'main':
app.run()

2.3 路由系统
@app.route('/user/'):传递字符串类型的数据
@app.route('/post/int:post_id'):传递整型数据
@app.route('/post/float:post_id'):传递浮点类型数据
@app.route('/post/path:path'):传递路径
@app.route('/object:object'):传递自定义数据类型
from flask import Flask, url_for
from werkzeug.routing import BaseConverter

app = Flask(import_name=name)

1.定义自己的转换器

class RegexConverter(BaseConverter):

 # map是固定的参数,将整个列表进行带入,regex是写入的参数,添加进新的转换器类型
def __init__(self, map, regex):
    # 调用父类的初始化方法
    super(RegexConverter, self).__init__(map)
    self.regex = regex

def to_python(self, value):
    # 路由匹配时,匹配成功后传递给视图函数中参数的值
    return int(value)

def to_url(self, value):
    # 使用url_for反向生成URL时,传递的参数经过该方法处理,返回的值用于生成URL中的参数
    val = super(RegexConverter, self).to_url(value)
    print(val)
    return val

2.将自定义的转换器添加到flask的应用中

app.url_map.converters['regex'] = RegexConverter

@app.route('/index/<regex("\d+"):nid>')
def index(nid):
print(url_for('index', nid='888'))
return 'Index'

if name == 'main':
print(app.url_map) # 查看路由信息
app.run()

请求与响应
from flask import Flask, request, render_template, redirect, jsonify
, make_response # 返回响应头

app = Flask(name)

@app.route('/')
def index():
"""请求相关信息"""
# request.method
# request.args
# request.form
# request.values
# request.cookies
# request.headers
# request.path
# request.files
# obj = request.files['the_file_name']
# obj.save('/var/www/uploads/' + secure_filename(f.filename))
"""以上的是常用的"""
# request.full_path
# request.script_root
# request.url
# request.base_url
# request.url_root
# request.host_url
# request.host

"""响应相关"""
"""
响应头的使用
response = make_response(render_template('index.html'))  # 创建响应数据
print(type(response))
response.delete_cookie('key')  # 删除cookie
response.set_cookie('key', 'value')  # 设置cookie
response.headers['X-Something'] = 'A value'
return response
"""
return "hello world"  # 可以使用json.dumps({}) / jsonify({}) 返回JSON数据
# return render_template("index.html", n1=123)  # 渲染静态文件,第二个参数可以是字典解包,或者等号传参,传递给前端页面
# return redirect("/index")  # 重定向

if name == 'main':
app.run()

变量
index.html里面的内容

index
{{ k1 }}

{{ k2[0] }} {{ k2[1] }}

匿名函数运行的结果为:{{ k3("pwd") | safe }}

app.py 里面的内容

from flask import Flask, render_template, Markup

app = Flask(name)

def input_(value):
# 生成input标签
return Markup("" % value) # Markup 的功能和|safe一样,使得html内容可以渲染出来,关闭对文本信息的转义,其为过滤器

@app.route('/')
def index():
context = {
"k1": 123,
"k2": [11, 12, 13],
"k3": lambda x: input_(x),
}
return render_template("index.html", **context)

if name == 'main':
app.run()

2、 继承
parent.html

父类 头部 {% block content %} {% endblock %} 尾部

{% extends "parent.html" %}
{% block content %}

{{ k1 }}

{{ k2[0] }} {{ k2[1] }}

匿名函数运行的结果为:{{ k3("pwd") | safe }}

{% endblock %}

session
除请求对象之外,还有一个 session 对象。它允许你在不同请求间存储特定用户的信息。它是在 Cookies 的基础上实现的,并且对 Cookies 进行密钥签名要使用会话,你需要设置一个密钥

字典中拥有的方法,session就拥有

标签:index,return,Flask,request,app,基础,url
From: https://www.cnblogs.com/w21y/p/18144351

相关文章

  • [03] JS-基础语法(二)
    1.判断、循环1.1if-elseif语句ifelse语句ifelseifelse语句e.g.编写一个程序,获取一个用户输入的整数,然后显示这个数是奇数还是偶数。//编写一个程序,获取一个用户输入的整数//letnum=+prompt("请输入一个整数")letnum=parseInt(prompt("请输入一个整数"......
  • RTK基础知识
    GPSGNSSRTK区别上面这三个缩写经常会遇到,当然也经常会混淆GPS(GlobalPositioningSystem)即全球定位系统,是美国从20世纪70年代开始研制,历时20年,耗资200亿美元,于1994年全面建成,具有在海、陆、空进行全方位实时三维导航与定位功能的新一代卫星导航与定位系统。能够RTK(RealTi......
  • 软件工程基础-实验一-音乐软件
    一、对比分析墨刀、Axure、Mockplus等原型设计工具的各自的适用领域及优缺点,以下为三个工具的对比分析1.适用领域:①墨刀:墨刀适用于一些简单,快速的在线原型设计工作,设计便捷,协同办公效率高;但是使用界面免费有限页面数量,和受网络影响可能导致页面丢失让墨刀下降了一个层次,通过A......
  • 信创里程碑:Tapdata 同时通过华为云 GaussDB 及鲲鹏兼容互认证,全面支持基础设施自主创
    近日,深圳钛铂数据有限公司(以下简称钛铂数据)自主研发的钛铂实时数据平台(TapdataLiveDataPlatform)分别与华为云GaussDB、华为云公有云平台(鲲鹏)完成相互兼容性测试,经功能、性能、安全三轮测试显示,TapdataLiveDataPlatform与二者兼容性良好,系统功能正常,运行稳定,顺利获得华为云......
  • JAVA基础-流程控制、字符串
    一、java基础1、java主类结构packagecom.study.again001;包名publicclasshelloword{类名staticStrings1="1";静态成员变量publicstaticvoidmain(String[]args){main方法Strings2="2";局部变量System.out.println(s1......
  • 前端【小程序】10-小程序基础篇【事件对象】
    事件处理事件对象前面已经介绍过小程序事件监听的语法:bind:事件类型=事件回调,但是小程序的事件回调不支持传参数,因此要将模板中的数据传递到事件回调中就必须要通过事件对象来实现。小程序事件回调函数的第1个参数即为事件对象,事件对象中包括了一些有用的信息:index.......
  • 如何在HTML中使用JavaScript:从基础到高级的全面指南!
    JavaScript是一种轻量级的编程语言,通常用于网页开发,以增强用户界面的交互性和动态性。然而在HTML中,有多种方法可以嵌入和使用JavaScript代码。本文就带大家深入了解如何在HTML中使用JavaScript。一、使用script标签要在HTML中使用JavaScript,我们需要使用<script>标签。这个标......
  • 模拟电路学习笔记——半导体基础知识
    1.纯净的具有晶体结构的半导体称为本征半导体2.导体导电只有一种载流子,即自由电子导电本征半导体含两种载流子:自由电子和空穴载流子:运载电荷的粒子3.杂质半导体*本征半导体中掺入少量合适的杂质元素,便可得到杂质半导体3.1N型半导体:纯净的硅晶体中掺入五价......
  • GNSS基础知识
    1.NMEA语句常用的NMEA语句有GGA(位置信息)、RMC(最简导航传输信息)、GSV(可视卫星状态)、GSA(参与定位卫星以及DOP值等信息)、ZDA(UTC时间信息)、VTG(地面速度信息)、GLL(大地坐标位置信息)、GST(伪距误差统计信息)还有其他一些语句DTM(参考坐标系信息)、GBS(GNSS卫星故障检测)、HDT(航向......
  • Python Flask+Pandas读取excel显示到html网页: CSS控制表格样式、表头文字居中
    前言全局说明CSS控制表格样式一、安装flask模块二、引用模块三、启动服务模块安装、引用模块、启动Web服务方法,参考下面链接文章:https://www.cnblogs.com/wutou/p/17963563Pandas安装https://www.cnblogs.com/wutou/p/17811839.htmlPandas官方API说明https://pand......