使用python编写web项目,第四节,创建一个基本的视图

上一节内容讲了项目的拆分和基础模型的创建,这一节讲一下怎么创建一个基本的视图

在一个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( ) ’ 方法,虽然有时候我们要查找的字段本来就是不能重复是,返回的查询结果应该只有一条,但是还是需要使用这个方法,才能返回一个正确的对象

使用python编写web项目,第四节,创建一个基本的视图_第1张图片图中下面的对象才是正确的对象

其次,在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

以上就是关于项目的基本视图的编写,看到这里,如果有觉得文章不错的朋友,麻烦点个赞,收藏一下,顺便再加个关注,嘿嘿嘿

你可能感兴趣的:(前端,python,flask,vscode,后端)