当前位置: 首页 > 后端技术 > Python

Flask项目的配置信息

时间:2023-03-26 12:26:23 Python

1。安装pipenv并创建虚拟环境Windows:pipinstallpipenvLinux或macOS:sudopipinstallpipenv如果有多个版本的python,注意安装的是哪个python,检查是使用pip还是pip3。查看是否安装了pipenv以及版本号pipenv--version创建虚拟环境首先在项目和目录下创建一个.venv文件夹,这样虚拟环境就安装在这个项目下了。默认情况下,pipenv会统一管理虚拟环境。在Windows中,虚拟环境文件夹在C:\Users\Administrator.virtualenvs\目录中,在Linux或macOS中,它将在~/.local/share/virtualenvs目录中创建。创建完成后命令行会提示虚拟环境文件夹的位置。pipenvinstall如果目录下没有pipfile和pipfile.lock文件,就会创建这两个文件。如果有,将安装pipfile中列出的依赖包。激活虚拟环境pipenvshell除了显式激活虚拟环境,pipenv还提供了一个pipenvrun命令,可以让命令在当前目录的虚拟环境中执行,而不显示虚拟环境激活,例如:pipenvrunpythonhello.pypipenvinstall只要在当前目录下,无论虚拟环境是否激活,都会在虚拟环境中安装安装包。pipfile和pipfile.lock用于管理依赖项并替换requirements.txt文件。好处是不需要手动维护这两个文件。使用pipenv安装/删除/更新依赖包时,会自动更新这两个文件。requirements.txt需要手动维护,文件中指出了包和对应的版本号,但这并不能保证不同电脑安装的是同一个包,但是pipfile.lockhash了包的具体版本,并且使用这个hash来安装包就会是同版本的同一个包,不会出现同一个版本,只是包不同而已。此外,pipfile还区分了普通依赖包和开发专用依赖包。开发环境和生产环境都需要通用的依赖包,而开发专用的依赖包只在开发环境使用,生产环境不使用。安装开发环境依赖包命令,在正常安装命令后加上--dev:pipenvinstallwatchdog--dev查看依赖列表pipenvgraph或者在虚拟环境下使用piplist。前者显示的内容会比较详细,会写需要的依赖包需要高于什么版本,当前包版本号是多少。升级命令pipenvupdateflask2。安装运行flask安装flaskpipenvinstallflask在安装flask的时候,还会安装五个依赖包:Jinja2(模板渲染引擎)MarkupSafe(HTML字符转义工具,转义)Werkzeug(WSGI工具集,处理请求对应,内置WSGI开发server,debuggerandreloader)点击(命令行工具)itsdangerous(提供各种加密签名命令)在项目根目录下创建app.py,名字随便取,但不是app.py需要设置环境变量FLASK_APP=启动开发服务器的文件名。Flask通过依赖包Click内置了CLI(CommandLineInterface,命令行交互界面)系统。安装flask时,会自动添加一个flask命令脚本。您可以通过flask命令执行内置命令、扩展提供的命令或自定义命令。前提是需要提前激活虚拟环境。如果没有激活,需要在前面加上pipenvrun,比如pipenvrunflaskrun。可以通过flask--help查看所有可用的命令Usage:flask[OPTIONS]COMMAND[ARGS]...命令:flaskassets压缩css/js等文件的命令还没有用过,会列出flask等命令--help介绍flaskdb执行数据库迁移flaskroutes显示路由命令flaskrun运行开发服务器(development),这是用的最多的flaskshell在虚拟环境中运行一个pythonshell。flaskrun命令运行的开发服务器默认会监听127.0.0.1:5000/,按Ctrl+C退出。并启用多线程支持。如果执行flaskrun命令后出现commandnotfound提示(commandnotfound)或其他错误,可以尝试使用python-mflaskrun命令。自动发现程序实例之所以运行flaskrun命令不需要提供程序实例(app=Flask(name))所在模块(app.py)的位置,因为flask会自动sidewall程序instance,以及自动检测规则:从runningflaskrun的当前目录中查找app.py和wsgi.py模块,并从中查找名为app或application的程序实例。从环境变量FLASK_APP对应的值中找到app或application的程序实例。程序的主模块名为app.py,flaskrun可以自动在里面找到程序实例。如果不是app.py,则必须设置环境变量FLASK_APP,并将包含程序实例的模块名赋值给该变量。只有这样,flaskrun才能正确绑定到这个模块中。linux或macOS命令:exportFLASK_APP=hello#hello是包含程序实例hello.pywindows命令的模块名:setFLASK_APP=hello管理环境变量除了FLASK_APP,后面还会设置其他环境变量,set在命令行上的缺点是关闭命令行后环境变量消失,再次运行flask时需要重新设置,所以人们为了不经常设置环境变量决定使用配置文件来设置,这涉及到一个依赖包python-dotenv,使用该依赖管理环境变量,安装后在工程和目录下创建.env和.flaskenv两个文件。.flaskenv用于存放与flask相关的公共环境变量,如FLASK_APP、FLASK_ENV等。.env用于存放包含敏感信息的环境变量,如用于配置邮件服务器的账户名和密码。内容格式使用键值对如FLASK_APP=hello,不需要引号,#作为注释。.env文件是私有信息,不要上传到远程仓库,记得在.gitignore文件中加上它的名字,这样会告诉git忽略这个文件。优先级:命令行手动设置的环境变量>.env中设置的环境变量>.flaskenv中设置的环境变量。flaskrun命令可以在flaskrun命令后加上host和port进行扩展。flaskrun--host=0.0.0.0#这将使服务器监听所有外部请求flaskrun--port=8000#环境变量也可以用来监听8000端口的主机和端口要设置FLASK_RUN_HOST=0.0.0.0和FLASK_RUN_PORT=8000。设置运行环境变量FLASK_ENV可以设置运行环境,development为开发环境,production为生产环境,flaskrun运行开发环境。如果设置为生产,会有警告,但可以运行。一般在开发环境的.flaskenv文件中设置这个环境变量,会开启DebugMode,运行flaskrun程序会自动激活Werkzeug内置的调试器和重载器。请注意,绝不能在生产环境中启用调试模式。Debugger:当程序出错时,你会在网页上看到详细的错误跟踪。有时候内容太多,复制最上面的报错信息,通过Ctrl+F搜索可以快速定位报错位置。调试器允许在网页上运行python代码。单机错误信息右侧的命令行图标会弹出一个窗口要求输入PIN码,即服务器启动时在命令行窗口打印出的调试器PIN码。输入PIN码后,可以点击错误堆栈中某个节点右侧的命令行节点图标,此时会打开一个包含代码执行上下文信息的pythonshell,可用于调试。Reloader:每次修改代码后,服务器会自动重启以查看修改后的变化。HTML文件修改不会重启服务器,直接刷新网页即可。默认情况下,使用Werkzeug的内置统计重新加载器。缺点是耗电严重,精度一般。改为使用python库中的Watchdog,因为它只在开发环境中使用,所以安装后加上--dev。开发依赖包会显示在pipfile文件的dev-packages部分。pipenvinstallwatchdog--dev3.pythonshell在flask项目中,可以使用flaskshell命令打开pythonshell,可以执行exit()或quit()退出。在Windows中,您可以使用Ctrl+Z并按Enter退出。对于Linux和macOS,按Ctrl+D直接返回。使用flaskshell命令打开的pythonshell自动包含程序上下文,并且应用程序实例已被导入:>>>app>>>app.name'hello'我试图打开pythonshellpython,然后直接进入app会报错(helloflask)D:\GitHub\flask\helloflask\demos\hello>pythonPython3.8.2(tags/v3.8.2:7b3ab59,Feb252020,22:45:29)[MSCv.191632bit(Intel)]onwin32键入“help”、“copyright”、“credits”或“license”以获得更多信息。>>>appTraceback(mostrecentcalllast):File"",line1,inNameError:name'app'isnotdefined需要提前导入应用程序实例>>>fromhelloimportapp>>>app>>>app.name'hello'上下文(context)可以理解为环境。为了正常运行,需要临时保存一些相关操作的状态和数据。这些状态和数据统称为上下文。在flask中,有两种上下文,分为程序上下文和请求上下文。记得稍后写一个单独的上下文注释。