Python Flask开发笔记

news2024/11/24 2:05:16

Python Flask开发笔记

  • 一、创建flask项目
    • 1.开发环境:
    • 2.安装Flask
    • 3.使用pycharm,创建flask项目
  • 二、flask介绍
    • 1.介绍初始flask主程序接口文件
    • 2.Flask() 类
      • 1.Flask参数解释
        • 0.sys.modules用于缓存程序导入模块名
        • 1.import_name 主程序模块名
        • 2.static_url_path 浏览器url访问路径
        • 3.static_folder 静态文件存储目录
        • 4.static_host 静态文件主机地址
        • 5.host_matching
        • 6.template_folder 模板存储目录
        • 7.instance_path 指定配置文件存储目录
        • 8.instance_relative_config
        • 9.root_path 项目的根目录

一、创建flask项目

1.开发环境:

操作系统:windows10
python版本:python-3.7.9
flask版本:

2.安装Flask

# 查看python版本 ==》 版本3.7.9
C:\Users\Administrators>python -v
	Python 3.7.9 (tags/v3.7.9:13c94747c7, Aug 17 2020, 18:58:18) [MSC v.1900 64 bit (AMD64)] on win32
	Type "help", "copyright", "credits" or "license" for more information.
	import 'atexit' # <class '_frozen_importlib.BuiltinImporter'>
	>>> exit()
# 安装flask
C:\Users\Administrators>python -m pip install flask

3.使用pycharm,创建flask项目

在这里插入图片描述
在这里插入图片描述

二、flask介绍

1.介绍初始flask主程序接口文件

from flask import Flask  # 引用flask架构

app = Flask(__name__)   # 创建Flask对象

@app.route('/')  # 路由分发
def hello_world():  # 接口函数
    return 'Hello World!'  # 返回的页面;返回的数据

if __name__ == '__main__':
    app.run()  # 运行flask

2.Flask() 类

1.Flask参数解释

# 必选参数
import_name: str,  # 应用程序包的名称,通过它来拼接静态文件或者模板文件路径
# 可选参数
static_url_path: t.Optional[str] = None,
static_folder: t.Optional[t.Union[str, os.PathLike]] = "static",  
static_host: t.Optional[str] = None,  
host_matching: bool = False, 
subdomain_matching: bool = False,
template_folder: t.Optional[str] = "templates",
instance_path: t.Optional[str] = None,
instance_relative_config: bool = False,
root_path: t.Optional[str] = None, 

0.sys.modules用于缓存程序导入模块名

程序在导入某个模块时,会首先查找sys.modules中是否包含此模块名,若存在,则只需将模块的名字加入到当前模块的Local名字空间中;若不存在,则需要从sys.path目录中按照模块名称查找模块文件,

1.import_name 主程序模块名

app = Flask(import_name=__name__)
print('is __name__ %s' % __name__)
print(app.import_name, 'ssss')
输出:
is __name__ app
app ssss
# 通过sys.modules.get(import_name) 获取模块的路径

2.static_url_path 浏览器url访问路径

如果static_url_path=/test/url/
浏览器访问:https://127.0.0.1:8080/test/url/js/index.js
static_url_path=None
浏览器访问:https://127.0.0.1:8080/js/index.js

3.static_folder 静态文件存储目录

如js,css,图片等文件存储目录,浏览器访问时,如果static_url_path 存在,加上该url+文件名,浏览器访问:https://127.0.0.1:8080/static_url_path路径/js/index.js
如果static_url_path 不存在 浏览器访问:https://127.0.0.1:8080/js/index.js

4.static_host 静态文件主机地址

指定主机与host_matching=True一起使用才有效

5.host_matching

当host_matching=True时,须指定static_host=主机地址:端口号,默认localhost:5000

6.template_folder 模板存储目录

一般存储.html等页面文件

7.instance_path 指定配置文件存储目录

instance_path和instance_relative_config是配合来用的、
这两个参数是用来找配置文件的,当用app.config.from_pyfile('settings.py')这种方式导入配置文件的时候会用到
实例文件夹与默认的跟文件夹分离,降低耦合度。方便后期修改实例的时候不影响到跟文件夹

from flask import Flask

app = Flask(__name__)
print(app.instance_path, 'instance_path')
print(app.root_path, 'root_path')
输出:
D:\PersonalProject\FlaskProject\test01\instance instance_path
D:\PersonalProject\FlaskProject\test01 root_path
# 根目录与实例目录只多了\instance

8.instance_relative_config

与instance_path 一起使用,当为True时,会在instance_path指定的目录中查找配置文件,默认是在根目录下查找

9.root_path 项目的根目录

Flask类root_path: t.Optional[str] = None
Flask继承自Scaffold类,Scaffold类构造函数中root_path, 是调用get_root_path(self.import_name);如下代码:

if root_path is None:
	   root_path = get_root_path(self.import_name)

get_root_path(import_name: str)

def get_root_path(import_name: str) -> str:
    mod = sys.modules.get(import_name)   #模块路径对象; sys.modules是获取系统modules的路径如:{'app': <module 'app' from 'D:\\PersonalProject\\FlaskProject\\test01\\app.py'>}
    if mod is not None and hasattr(mod, "__file__") and mod.__file__ is not None:
        return os.path.dirname(os.path.abspath(mod.__file__))
    loader = pkgutil.get_loader(import_name)
    if loader is None or import_name == "__main__":
        return os.getcwd()  # 用于返回当前工作目录D:\PersonalProject\FlaskProject\test01
    if hasattr(loader, "get_filename"):
        filepath = loader.get_filename(import_name)  # type: ignore
    else:
        __import__(import_name)
        mod = sys.modules[import_name]
        filepath = getattr(mod, "__file__", None)
        if filepath is None:
            raise RuntimeError(
                "No root path can be found for the provided module"
                f" {import_name!r}. This can happen because the module"
                " came from an import hook that does not provide file"
                " name information or because it's a namespace package."
                " In this case the root path needs to be explicitly"
                " provided."
            )
    return os.path.dirname(os.path.abspath(filepath))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/144400.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IconJar - Mac 上的一款多功能图标素材管理工具

IconJar - Mac 上的一款多功能图标素材管理工具 IconJar 是一个多功能的图标管理工具&#xff0c;由世界各地的设计师和开发人员使用。在一个应用程序中搜索、组织、预览和检索图标&#xff0c;而不是创建大量的文件夹来存储你的收藏。这款应用针对黑暗模式进行了优化&#xff…

2022年自动化测试工具汇总——实用的功能测试工具篇

如今&#xff0c;UI自动化测试工具就和雨后春笋般&#xff0c;层出不穷。由于每种工具都有自己的重点和策略&#xff0c;所以总是让人无从下手。今天我们来对比现在使用比较广泛的几个UI自动化测试工具&#xff0c;来看看他们之间的优缺点。 首先&#xff0c;我们先简单介绍一下…

4.6.4、边界网关 BGP 的基本工作原理

1、力求寻找较好的路由 因特网采用分层次的路由选择协议 内部网关协议&#xff08;例如&#xff1a;路由信息协议 RIP 或开放最短路径优先 OSPF&#xff09; 它们都是设法使分组在一个自治系统内尽可能有效地从源网络传输到目的网络无需考虑自治系统外部其他方面的策略 外部…

内网渗透-src挖掘-外网打点到内网渗透-3层内网渗透测试记录-2023年1月

1、通过信息搜集&#xff0c;发现目标有一个外网访问的通达OA系统 2、通达OA的漏洞是非常多的&#xff0c;这里利用大佬写好的通达OA一键getshell工具 成功获取webshell 3、连接webshell&#xff0c;上传cs马儿到服务器 4、执行获取主机权限 成功上线 5、通过Ladon插件发…

百分之80新手都不知道,SEO搜索引擎优化【sitemap网站地图 配置】

Sitemap 可方便网站管理员通知搜索引擎他们网站上有哪些可供抓取的网页。最简单的 Sitemap 形式&#xff0c;就是XML 文件&#xff0c;在其中列出网站中的网址以及关于每个网址的其他元数据&#xff08;上次更新的时间、更改的频率以及相对于网站上其他网址的重要程度为何等&am…

浅析oauth2.0及应用场景

讲OAuth2.0之前&#xff0c;我们先理解一个概念&#xff0c;授权用户和资源权限的概念授权用户&#xff1a;用户访问某个应用系统&#xff0c;该应用系统请求认证中心授权以获取这个登录用户的信息&#xff0c;但并没有得到这个用户的密码&#xff0c;这个就是OAuth2.0实现的要…

N个点,求距离最近的两个点---分治策略(1)

设平面有n个点的直角坐标是,i 1, 2, ...,n,求距离最近的2个点&#xff0c;距离计算&#xff1a; 首先这个问题是可以使用蛮力算法&#xff0c;一共n(n-1)/2个点对&#xff0c;每对点对计算需要常数的时间&#xff0c;蛮力算法需要的时间。 由于点对有二维的空间坐标&#xf…

(三十)Vue之回顾本地存储webStorage

文章目录webStorageLocalStoragesessionStorage改造TodoList案例为本地存储Vue学习目录 上一篇&#xff1a;&#xff08;二十九&#xff09;Vue之组件化编码流程 下一篇&#xff1a;&#xff08;三十一&#xff09;Vue之自定义事件 webStorage 使用HTML5可以在本地存储用户…

Python基础(二十二):文件操作

文章目录 文件操作 一、文件操作的作用 二、文件的基本操作 1、文件操作步骤

同时开启的revit模型和navisworks如何同步呢?

一、 Navisworks与Revit同步问题 同时开启的revit模型和同时开启的navisworks如何同步呢? 1.如图1所示打开了一个revit模型 将模型保存在指定的路径上&#xff0c;然后通过直接拖拽的方式在navisworks manage打开模型文件&#xff0c;过程中会出现读条状态&#xff0c;如图2所…

【MySQL进阶教程】 索引使用与设计原则

前言 本文为 【MySQL进阶教程】 索引使用与设计原则 相关知识&#xff0c;下边将对索引的使用&#xff08;包括&#xff1a;验证索引效率&#xff0c;最左前缀法则&#xff0c;范围查询&#xff0c;索引失效情况&#xff0c;SQL提示&#xff0c;覆盖索引&#xff0c;前缀索引&a…

Struts2获取表单数据

Struts2获取表单数据Struts2获取表单数据1、原始Servlet方法2、属性封装3、表达式封装4、模型驱动封装Struts2获取表单数据 在Struts2中获取表单数据或提交路径的参数值的方式有4种。如下&#xff1a; 原始Servlet方法属性封装表达式封装模型驱动封装 1、原始Servlet方法 该…

文章书写方法

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注…

Python爬虫 xpath解析基础

今天继续给大家介绍Python爬虫相关知识&#xff0c;本文主要内容是Python爬虫 xpath解析基础。 一、xpath简介 xpath&#xff0c;即XML Path Language&#xff0c;是一种用来确定XML文档中某部分位置的语言&#xff0c;Xpath以XML为基础&#xff0c;可以提供用户在数据结构树…

8、可观测性--链路追踪

文章目录链路追踪服务之间的依赖Span 的构成Span 之间关系链路图链路追踪与 Dapper链路追踪的作用链路查询性能分析拓扑图依赖关系跨应用/语言采样率链路追踪 首先&#xff0c;我来带你了解一下什么是链路追踪&#xff1f; 服务之间的依赖 在前言中介绍了数据的来源&#xf…

运营|为什么需要配置https?

什么是HTTPS、它带来了什么? 从名字来看,它比http多了一个“s”,这个“s”表示安全。目的在于提供更安全的HTTP通道,即HTTP下加入SSL层并且加密。太详细的我就不再这里说了,再说我就要抄百度百科了。简单来说,不同于HTTP使用80端口,HTTPS使用443端口,HTTPS还需要一个付…

【手写 Vue2.x 源码】第七篇 - 阶段性梳理

一&#xff0c;前言 上篇,介绍了 Vue 数据初始化流程中&#xff0c;Vue 实例上数据代理的实现&#xff0c;核心思路如下&#xff1a; 将 data 暴露在 vm._data 实例属性上利用 Object.defineProperty 将 vm.xxx 操作代理到 vm._data 上 本篇&#xff0c;对当前版本的数据劫持…

[VP]河南第十三届ICPC大学生程序竞赛 J.甜甜圈

前言 传送门 : https://ac.nowcoder.com/acm/contest/17148/J 题意 : 给定两个甜甜圈堆 , 每次只能吃所有中最甜的那一个 , 否则的话就移动 询问最小的移动步骤 思路 : 很明确的一个目标 , 寻找当前最大值并且求出距离 那么我们考虑将两个甜甜圈堆进行合并 , 使得变成一个…

LeetCode:17. 电话号码的字母组合

17. 电话号码的字母组合1&#xff09;题目2&#xff09;思路3&#xff09;代码4&#xff09;结果1&#xff09;题目 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电话按键相同…

【C++入门】C向C++过渡(上)

前言在正式进入C之前&#xff0c;我们首先要对C有一个基本的认知。这里我就不过多的进行描述了&#xff0c;有兴趣的可以去网络搜索一番。总而言之&#xff0c;从名称上面我们也可以看得出来&#xff0c;C是在C的基础上进行不断地优化发展。事实上确实是这样&#xff0c;C语言中…