当前位置: 首页 > Linux

Flask二快速入门

时间:2023-04-06 04:07:41 Linux

1.一个最小的Flask应用fromflaskimportFlaskapp=Flask(__name__)#app是一个程序实例,一个项目只能有一个程序实例@app.route('/')#路由装饰Defhello_world():#viewfunctionreturn'HelloWorld!'#returnastringif__name__=='__main__':app.run()将程序保存为hello.py使用Python解释器运行$pythonhello.py*运行于http://127.0.0.1:5000/访问http:///127.0.0.1:5000/,你会看到HelloWorld问候语。要关闭服务器,请按Ctrl+C。这段代码有什么作用?首先,我们导入了Flask类。这个类的实例将是我们的WSGI应用程序2。接下来,我们创建这个类的实例,第一个参数是应用程序模块或包的名称。如果您使用的是单个模块(如本例所示),则应使用名称,因为模块的名称会有所不同,具体取决于它是作为单独的应用程序启动还是作为模块导入(即'__main__'或实际导入姓名)。这是必要的,以便Flask知道在哪里可以找到模板、静态文件等。有关详细信息,请参阅Flask的文档。然后,我们使用route()装饰器告诉Flask什么URL应该触发我们的函数。4.这个函数的名字在生成URLs的时候也被一个特定的函数使用,这个函数返回我们想要在用户浏览器中显示的信息。5.最后,我们使用run()函数让应用程序在本地服务器上运行。其中ifname=='__main__':确保服务器仅在脚本由Python解释器直接执行时运行,而不是在作为模块导入时运行。(1)调试模式如果启用调试支持,服务器会在代码修改后自动重新加载,并在发生错误时提供一个非常有用的调试器。开启调试模式有两种方式:一种是直接在应用对象上设置:app.debug=Trueapp.run()另一种是作为run方法的参数传入:app.这两种方法具有完全相同的效果。[注意]交互式调试器不得在生产环境中使用。(2)路由装饰器@app.route('/')defindex():return'Index'@app.route('/hello/')defhello():return'

Helloworld!

'这个函数的返回值叫做response,就是客户端收到的内容。像index()这样的函数被称为视图函数。视图函数返回的响应可以是包含HTML的简单字符串,也可以是复杂的形式。(3)变量规则@app.route('/user/')defshowUserName(name):return"User%s"%name@app.route('/post/')defshowPostId(post_id):return"Post%d"%post_idFlask支持在路由中使用int、float和path类型。路径类型也是一个字符串,但不是将斜线视为分隔符,而是将它们视为动态片段的一部分。整数|接受整数接受浮动路径|类似于default,但也接受斜杠变量规则含义:处理动态信息。【注意】app.route()函数中的括号是变量名,一定要和视图函数的形参名保持一致!如果是int或者float类型,是不能直接返回的!必须转为字符串格式,否则会报错:TypeError:'int'objectisnotcallable(4)uniqueURL/redirectionbehavior@app.route('/about/')#推荐用法#@app.route('/about')#deprecateddefabout():return'Theaboutpage'虽然它们看起来很相似,但它们在URL定义中对尾部斜线的使用不同:-在第一种情况下,URL指向规范about的URL有一个尾部斜杠。这感觉很像文件系统中的文件夹。访问没有尾部斜杠的URL将被Flask重定向到带有斜杠的规范URL。所以强烈建议统一加斜杠!-第二种情况的URL末尾没有斜杠,类似于类UNIX系统中文件的路径名。访问带有尾部斜杠的URL会产生404“未找到”错误。此行为允许关联的URL在忘记尾部斜杠时接管,这与Apache和其他服务器的行为没有什么不同。另外,也保证了URL的唯一性,有助于避免搜索引擎对同一个页面进行两次索引。(5)重定向和错误使用redirect()函数将用户重定向到其他地方。使用abort()函数中止请求并返回错误代码。例如:@app.route('/redir/')defredir():returnredirect('/login/')@app.route('/login/')deflogin():abort(401)用户将从/redir/重定向到无法访问的页面(401表示禁止访问)。(6)构造URL使用url_for()为指定函数生成(构造)URL。它接受一个函数名作为第一个参数,也接受与URL规则的可变部分对应的命名参数。例如:@app.route('/world/')defworld():#returnredirect('/hello/')#returnredirect(url_for('hello'))#returnredirect(url_for('showUserName',name='liusheng'))returnredirect(url_for('showPostId',post_id=100))#注意这里的100可以是字符串也可以是整数。使用url_for()生成URL而不是在模板中对其进行硬编码的优点:1.反向构建通常比硬编码更具描述性。允许一次性修改URL,而不是到处搜索和修改。2.URL构造转义特殊字符和Unicode数据,为您省去很多麻烦。(7)使用Flask-Script支持命令行选项Flask-Script是Fl??ask的一个扩展,它为Flask程序增加了一个命令行解析器。Flask-Script带有一组常用选项,还支持自定义命令。Flask-Script扩展使用pip安装:(venv)$pipinstallflask-script在hello.py程序中添加命令行解析功能需要修改的地方:fromflask_scriptimportManagermanager=Manager(app)if__name__=='__main__':修改了manager.run()以便程序可以使用一组基本的命令行选项来启动Web服务器。:pythonhello.pyrunserver--hostHOST|将主机设置为HOST--portPORT|将端口设置为PORT-d|设置以调试模式运行而不是运行模式-r|设置自动重新加载(app.debug为真)标准命令:pythonhello.pyrunserver-d-r--host0.0.0.0pythonhello.pyrunserver-d-r--port:5001