上一节内容讲了项目的拆分和基础模型的创建,这一节讲一下怎么创建一个基本的视图
在一个web项目中,用户的登录视图一般都是比较经典的视图,大多数时候也是第一个编写的视图,在这里提醒一下,学过flask框架的朋友应该都知道,这里的视图并不是前端的页面,视图可以简单的理解成对相应的页面中的数据做处理的接口函数
所以在这里我们以用户的登录视图为例,来说一下怎么编写视图
首先,因为项目是通过蓝图来管理各业务模块及视图,所以在视图文件中,我们需要导入蓝图对象
# 这行代码根据自己的实际情况来 from stu_mng.student import user_bp # user_bp是小编创建的蓝图对象
接下来就是创建映射视图的路由(如果有对于映射一词不理解的可以上网去搜,这个小编也是在学习过程中慢慢领会的,一时不知道该怎么解释),并封装视图函数
@user_bp.route('/login', methods=['POST']) def login(): ...
在视图函数中,一般都是先接收请求的数据,这里说一下,根据请求头中Content-Type参数的值的不同使用不同的方法接收请求的数据
如果该参数的值为:application/json
# 则使用这个方法获取数据 request.get_json().get('args')
如果该参数的值为:application/x-www-form-urlencoded
# 则使用这个方法获取请求的数据 request.form.get('args')
这个参数在编写测试代码发送请求的时候,小编所使用的插件是需要自己设置的,和小编使用同款插件的应该知道自己这个参数是什么值
对于用户的登录视图,一般需要接收的参数无非就是用户名或者账号和密码,一般是这两个,在接收到参数后,如何对参数进行处理,是视图函数中的重点,这里小编说一个比较严谨的处理思路
首先是判断接收的数据是否完整
# 判断参数是否都有值,如果有空值则不进入该语句块 if all(['name','passwd']): ... # 如果有看不懂这行代码的写法的,可以自己去测试
如果数据完整,则根据账号在数据库中进行查找,看是否存在该用户信息
user = Student.query.filter(Student.name==name).first() if user: ...
这行代码的语法学过sqlalchemy的朋友应该都能看懂,小编在这里补充一些细节,首先是末尾的 ‘ . first( ) ’ 方法,虽然有时候我们要查找的字段本来就是不能重复是,返回的查询结果应该只有一条,但是还是需要使用这个方法,才能返回一个正确的对象
其次,在MySQL数据库中,过滤的关键字有filter和filter_by两个,这两个的区别因为小编也容易忘记,所以这里细说一下,使用filter过滤时,被查询的字段需要指定模型的名字,且该关键字支持全部的关系比较符,使用filter_by过滤时,被查询的字段不需要指定模型的名字,但是该关键字只支持赋值符号,这是两者最明显的区别,这里我们过滤用的是关系比较符,不是赋值符号,所以应该使用filter方法
如果存在用户信息,再判断密码是否正确
if user.passwd == passwd: ...
也就是说,先判断信息是否完整,再判断用户信息是否存在,最后再判断密码是否正确,这是一个比较严谨的思路,有些嫌麻烦的朋友可能会自直接拿这两个数据去数据库中查找,看能不能查找到这条数据,当然这个也是可以的哈
最后再都通过判断后,就可以返回登录成功的信息了,因为前端需要接收到后端返回的信息才能做下一步操作嘛,并不是判断完就没事了哈,返回的信息一般是如下的JSON形式
{'code':200,'message':'登录成功'}
这里的code是网页的响应状态码,这个单词可以使用其他意思相近的单词替换,这个状态码是按照网页响应状态码的规范设置的,一般用200表示成功,常见的404就表示找不到网页
对状态码有兴趣的可以参考这篇文章:http://t.csdnimg.cn/4QDco (对状态码的解释比较官方的网站地址都很长,复制下来很占位置,所以小编在CSDN上面找了一篇,也很详细)
后面的 ‘ message ’ 是提示信息,这个单词有时也使用msg代替,具体的信息只要意思到位就行
有时候接收的数据在处理后还需要返回,也会添加在这个JSON数据里面,一般使用data,这些信息的键所使用的单词不是规定的,只要和前端对应就行,另外,除了判断成功会返回提示之外,就算没用通过判断,也需要返回提示错误的信息,这样前端才能根据返回的信息做出相应的处理,用户才能知道当前的操作错误
视图编写完之后就是进行测试了,这里就不说了,小编在测试的时候发现返回的信息被转成了如下这种编码
"\u767b\u5f55\u6210\u529f"
解决这个转码问题需要注意两个地方,一是在数据库的配置文件中设置如下参数
# 设置不使用ASEII编码
JSON_AS_ASCII = False
二是需要检查以下几个模块的版本,看和小编给出的是否相同
pip install Werkzeug==2.2.2
pip install Flask-SQLAlchemy==3.0.2
pip install Flask-Migrate==4.0.0
pip install PyMySQL==1.0.2
pip install Flask==2.2.2
以上就是关于项目的基本视图的编写,看到这里,如果有觉得文章不错的朋友,麻烦点个赞,收藏一下,顺便再加个关注,嘿嘿嘿