flask部署(大体了解)

框架学习目标:

  1. 如何编写视图
  2. 如何处理请求
  3. 如何构造响应

falsk简介

flask用Python语言基于Werkzeug工具箱编写的轻量极Web开发框架。
flask本身相当于一个内核,其他几乎 所有的功能都要用到扩展(邮箱扩展Flask-Mail,用户认证Flask-Login,数据库Flask-SQLAIchemy),都需要第三方的扩展来实现。可以用Flask扩展加入ORM,窗口体验证工具,文件上传,身份验证等。 其WSGI工具箱采用Werkzeug(路由模块),模板引擎使用Jinja2,这两个也是Flask框架的核心。
在这里插入图片描述

框架的对比

重量级的框架:为方便业务程序的开发,提供了丰富的工具、组件,如Django
快速实现业务、不考虑技术选型,越简单直接越好–>Django
轻量级的框架:只提供Web框架的核心功能,自由、灵活、高度定制,如Flask,Tornado
自由、灵活、高度定制–>flask

flask程序编写

创建.py文件

# 导入Flasklei
from flask import Flask]

# flask类接收一个参数__name__
app = Flask(__name__)

# 装饰器的作用是将路由映射到视图函数index
@app.route('/')
def index():
	return 'hell0 world'

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

Flask对象初始化参数

  • import_name
    Flask程序所在的包(模块),传__name__就可以
    其可以决定Flask在访问静态文件时查找的路径
  • static_url_path
    静态文件访问路径,可以不传,默认为:/+static_folder
  • static_folder
    静态文件存储的文件夹,可以不传,默认为static
  • template_folder
    模板文件存储文件夹,可以不传,默认为templates

配置加载的方式

    1、 从配置对象中加载
    app.config.from_object(配置对象)
    继承-->优点 复用
    敏感数据暴露  缺点  
from flask import Flask
class DefaultConfig(object)
	SECRET_KEY = '4564564564564'

app = Flask(__name__)
# 设置加载
app.config.from_object(DefaultConfig)

#定义视图

@app.route('/')
def index():
	print(aoo.config['SECRET_KEY'])
	return 'hello world'

if __name__ = '__main__'
	app.run()
2、从配置文件中加载
 app.config.from_pyfile('setting.py')
优点-->独立文件  保护敏感数据
缺点-->不能继承,路径固定 不灵活
from flask import Flask

app = Flask(__name__)
app.config.from_pyfile('setting')

# 定义视图
@app.route('/')
def index():
	print(app.config['setting.py'])
	return 'hello world'

if __name__ = '__main__'
	app.run()
3、环境变量中加载(未学)
优点-->独立文件,保护敏感数据 文件路径不固定 灵活
缺点-->不方便,要设置环境变量

app.run参数

可以指定运行的主机IP地址,端口,是否开启调式模式

app.run(host = ‘0.0.0.0’, port=5000,debug = True)

说明

  • 环境变量FLASK_APP说明flask的启动实例
  • flask run -h 0.0.0.0 -p 8000 绑定地址 端口
  • flask run --help获取帮助
  • 生产模式与开发模式控制
    通过FLASK_ENV环境变量指明
    export FLASK_ENV=production 运行在生产模式,为知名则默认为此方式
    export FLASK_ENV=development 运行在开发模式

查询路由信息

flask routes
在这里插入图片描述
Endpoint:代表视图函数的名字(跟视频的不一样),我这里应该是显示错了,在控制台输出的是index
Methods:请求方式
Rule:路径

在程序中获取
在应用中url_map属性中保存着整个Flask应用的路由映射信息,可以通过读取这个属性获取路由信息

print(app.url_map)
# 遍历路由信息
for rule in app.url_map.iter_rules():
	print('name={} path ={}'.format(rule.endpoint,rule.rule))

指定请求方式

在Flask中,定义路由其默认的请求方式为(未具体了解):

  • GET
  • OPTIONS(自带) – 简化版的GET请求,用于询问服务器接口信息的,比如接口允许的请求方式 允许的请求源头域名。
  • HEAD(自带)

利用methods参数可以指定一个接口的请求方式

@app.route("/itcast1",methods=["POST"])
def view_func_1():
	return "Hello world 1"
@app.route("/itcast2",methods=["GET","POST"])
def view_func_2():
	return "hello world 2"

蓝图

在Flask中,使用蓝图Blueprint来分模块组织管理。
蓝图实际可以理解为是一个存储一组视图方法的容器队像,具有如下特点:

  1. 一个应用可以具有多个Blueprint
  2. 可以将一个Blueprint注册到任何一个未使用的URL下如“/user”,"/goods"
  3. Blueprint可以单独具有自己的模块,静态文件或者其它的通用操作方法,它并不是必须要实现应用的视图和函数
  4. 在一个应用初始化时,就应该要注册需要使用的Blueprint
    但是一个Blueprint并不是一个完整的应用,它不能独立于应用运行,而必须要注册到某一个应用。

使用蓝图的三步骤
1.创建一个蓝图对象

uwer_bp = Blueprint('user',__name__)

2.在这个蓝图对象上进行操作,注册路由,指定静态文件夹,注册模板过滤气

@user_bp.route('/')
def user_profile():
	return 'user_profile'

3.在应用对象上注册这个蓝图对象

app.register_blueprint(user_bp)

render_template

render_template:引入index.html,同时根据后面传入的参数,对html进行渲染
在这里插入图片描述

from flask import Flask, render_template

app = Flask(__name__)


# 1.如何返回一个网页(模板)
# 2.如何给模板填充数据
@app.route('/')
def index():
    return render_template('index.html')


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

普通的表单验证显示

#wef_demo.py
from flask import Flask,render_template,request,falsh

app = Flask(__name__)

app.route('/',methods=['GET','POST'])
def index():
	# request:请求对象 -->获取请求方式,数据
	# 1.判断请求方式
	if request.methods == 'POST'
		# 获取请求对象
		username = request.form.get('username')
		password = request.form.get('password')
		password2 = request.form.get('password2')
		
		# 判断参数是否填写, 并且判断密码是否相同
		if not all([usernaem,password,password2]):
			print('参数不完整')
			# flash是为了输出的信息在网页上显示
			flash(u'参数不完整')
		elif password != password2
		  	print('密码不一致')
		  	flash(u'密码不一致')
		elsereturn 'success'

	return render_template('index_html')

if __name__ == '__main__':
	app.run()
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<form method="post">
    <label>用户名:</label><input type="text" name="username"><br>
    <label>密码:</label><input type="password" name="password"><br>
    <label>确认密码:</label><input type="password" name="password2"><br>
    <input type="submit" value="提交"><br>

    {% for message in get_flashed_messages() %}
        {{ message }}
    {% endfor %}

</form>

</body>
</html>

Flask重定向

from flask import Flask,abort,redirect

app = Flask(__name__)

app.route('/site')
def site():
	retyrn redirect("想要调用的网址")

if __name__ == '__main__':
	app.run() 
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值