python框架——Flask视图和URL

本文介绍了Python虚拟环境的使用,包括pipenv的安装与配置,以及在Windows和Linux上的操作。接着讲解了Flask框架的基础,如创建第一个Flask程序和启用调试模式。最后探讨了Flask中URL与视图的映射,包括不同类型的URL参数转换器和参数获取方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、虚拟环境

使用虚拟环境的目的:

到目前为止,我们所有的第三方包安装都是直接通过pip install xx的方式进行安装的,这样会将那个包安装到系统级的python环境中。但是有这样一个问题,比如我所用的Django是1.10.x的版本的,它无法兼容Django 0.9版本的,就导致在维护以前开发的项目时会出现一些问题。这时候我们可以通过虚拟环境来使自己的电脑同时拥有两套环境。

pipenv

windows安装pipenv
pip install pipenv
linux安装
pip install pipenv
配置环境变量

在创建虚拟环境前,为了方便之后对虚拟环境的管理,我们需要在环境变量中添加一个系统环境变量WORKON_HOME
这个环境变量能使之后创建的虚拟环境的安装包都进入它所指向的文件夹中。
在这里插入图片描述

创建并进入/退出/删除虚拟环境
pipenv shell  #进入虚拟环境
exit		  #退出虚拟环境
pipenv --rm   #删除整个环境   不会删除pipfile
小结:

在安装虚拟环境并试图创建并建立的时候,我遇到了一个路径错误的问题,主要原因是我曾经使用过anaconda,在注册表中一直保留着这个路径,在pipenv创建环境时自动使用了这个路径,由于我已将anaconda软件卸载,所以一直显示路径不合法。
解决方法:在注册表中找到相关信息并删除。

二、Flask简介

第一个flask程序
from flask import Flask
app=Flask(__name__)
@app.route('/')
def hello_world():
	return 'hellow world!'

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

点击运行,在浏览器中输入127.0.0.1:5000就可以看到hellow world!的字样。

进入debug模式

1. 设置debug模式

  • app.run(debug=True)
  • app.debug=True
  • app.config.update(DEBUG=True)
  • app.config[‘DEBUG’]=True
    2. 配置文件
  • 写死的方式:app.config(DEBUG=True)
  • app.config.update(DEBUG=True SECRECT_KEY=xxxx)
  • 创建一个config.py文件
    import config
    app.config.from_object(config)
    app.config.from_object(‘config’)
    app.config.from_pyfile(‘config.py’,silent=True
    需要注意的是,只能在开发环境下开启DEBUG模式,因为DEBUG模式会带来非常大的安全隐患。
    另外,在开启了DEBUG模式后,当程序有异常而进入错误堆栈模式,你第一次点击某个堆栈想查看变量值的时候,页面会弹出一个对话框,让你输入PIN值,这个PIN值在你启动的时候就会出现,比如在刚刚启动的项目中的PIN值为294-745-044,你输入这个值后,Werkzeug会把这个PIN值作为cookie的一部分保存起来,并在8小时候过期,8小时以内不需要再输入PIN值。这样做的目的是为了更加的安全,让调试模式下的攻击者更难攻击到本站。

三、URL与视图

URL与函数的映射

从之前的helloworld.py文件中,我们已经看到,一个URL要与执行函数进行映射,使用的是@app.route装饰器。@app.route装饰器中,可以指定URL的规则来进行更加详细的映射,比如现在要映射一个文章详情的URL,文章详情的URL是/article/id/,id有可能为1、2、3…,那么可以通过以下方式:

@app.route('/article/<id>/')
def article(id):
	return "%s article detail" %id

尖括号是固定写法,语法为converter:variable;variable默认的数据类型是字符串。如果需要指定类型,则要携程converter:variable,其中converter是类型名称,可以有以下几种:

  • string: 默认的数据类型,接受没有任何斜杠/的字符串。
  • int: 整形
  • float: 浮点型。
  • path: 和string类似,但是可以传递斜杠/。
  • uuid: uuid类型的字符串。
  • any:可以指定多种路径。
@app.route('/<any(list,tuple):url_path>/')
def item(url_path):
	return url_path

如果不想定制子路径来传递参数,也可以通过传统的?=的形式来传递参数,例如:/article?id=xxx,这种情况下,可以通过request.args.get(‘id’)来获取id的值。如果是post方法,则可以通过request.form.get(‘id’)来进行获取。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

自在行云

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值