一分钟快速实现Flask框架的蓝图和视图

举报
码农飞哥 发表于 2021/05/29 13:29:24 2021/05/29
【摘要】 您好,我是码农飞哥,感谢您阅读本文!接上一篇文章,上篇文章我们介绍了Flask框架与SQLAlchemy框架的整合一分钟快速实现Flask框架与SQLAlchemy框架的整合,这篇文章我们将介绍Flask框架的蓝图和视图。 文章目录 视图创建蓝图定义蓝图将蓝图注册到应用中使用蓝图注册接口 登录接口运行 总结 视图 视图是一个应用对请求进行响应的函数...

您好,我是码农飞哥,感谢您阅读本文!接上一篇文章,上篇文章我们介绍了Flask框架与SQLAlchemy框架的整合一分钟快速实现Flask框架与SQLAlchemy框架的整合,这篇文章我们将介绍Flask框架的蓝图和视图。

视图

视图是一个应用对请求进行响应的函数。Flask通过模型把进行的请求URL匹配到对应的处理视图。视图返回数据,Flask把数据变成出去的响应。Flask也可以反过来,根据视图的名称和参数生成URL。

创建蓝图

Blueprint是一种组织一组相关视图及其他代码的方法。与把视图及其他代码直接注册到应用的方式不同,蓝图方式是把它们注册到蓝图,然后在工厂函数中把蓝图注册到应用中。
项目的结构和环境跟上一篇文章一致。

定义蓝图

下面的代码就是定义了一个名为auth的蓝图。文件地址是:flaskr/views/__init__.py

from flask import Blueprint

# 创建了一个名称为'auth'的Blueprint。和应用对象一样,蓝图需要知道
# 是在哪里定义的,因此把__name__作为函数的第二个参数,url_prefix会添加到所有与该蓝图关联的URL前面
bp = Blueprint('auth', __name__, url_prefix='/auth')
# 在脚本的末尾导入是为了避免循环导入依赖
from . import auth

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

将蓝图注册到应用中

flaskr/__init__.py

def create_app(): //省略其他代码 # 导入并注册蓝图 from flaskr.views import auth app.register_blueprint(auth.bp)
	return app

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

使用蓝图

在此处,我们定义了一个注册接口以及用户登录接口。文件路径是:flaskr/views/auth.py

注册接口

from flaskr.views import bp
from flask import ( flash, redirect, render_template, request, url_for
)
from flaskr.biz import user_service

# @bp.route 关联了URL /register和register视图函数。当Flask收到一个指向
# /auth/register的请求时就会调用register视图并把其返回值作为响应
@bp.route('/register', methods=('GET', 'POST'))
def register(): # 如果用户提交了表单,那么request.method将会是'POST'。这种情况下就会开始 # 验证用户的输入内容。 if request.method == 'POST': # request.form是一个特殊类型的dict,其映射了提交表单的键和值。 # 表单中,用户将会输入其 username 和 password 。 username = request.form['username'] password = request.form['password'] error = None if not username: error = '用户名必填' elif not password: error = '密码必填' elif user_service.query_user_by_username(username, password) is not None: error = '用户名 {} 已经被注册'.format(username) if error is None: user_service.insert_user(username, password) # 用户数据保存后将转到登录页面,url_for()根据登录视图的名称生成相应的URL # 与写固定的URL相比,这样做的好处是如果以后需要修改该试图相应的URL,那么不用修改所有涉及到 URL 的代码。 #  redirect() 为生成的 URL 生成一个重定向响应。 return redirect(url_for('auth.login')) flash(error) return render_template('auth/register.html')

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

如上是注册接口,首先根据传入的用户名username和password查询用户是否存在,如果存在在直接返回用户已被注册的提示,如果用户不存在则插入一个新的用户并重定向到登录页面。

登录接口

@bp.route('/login', methods=('GET', 'POST'))
def login(): if request.method == 'POST': # request.form是一个特殊类型的dict,其映射了提交表单的键和值。 # 表单中,用户将会输入其 username 和 password 。 username = request.form['username'] password = request.form['password'] error = None user = user_service.query_user_by_username(username, password) if user is None: error = '用户不存在' elif user.get_username() != username or user.get_password() != password: error = '用户名和密码不正确' if error is None: return redirect(url_for('index')) return render_template('auth/login.html')


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

首先还是根据用户名和密码查询用户,如果用户不存在或者用户名或密码不正确则直接返回错误。否则,则登录成功,跳转到首页。

运行

运行项目,访问http://127.0.0.1:5001/auth/register 即可访问登陆接口,插入用户,但是由于没有页面所以返回会报错。

总结

本文介绍了如何使用Flask框架中的蓝图和视图,蓝图在Flask框架中使用也比较广泛。

文章来源: feige.blog.csdn.net,作者:码农飞哥,版权归原作者所有,如需转载,请联系作者。

原文链接:feige.blog.csdn.net/article/details/112557799

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。