python网站开发实例 flask_Python Web开发之——构建基于Flask框架的web后端项目

本文针对初学者,介绍了使用Flask框架搭建基于Python的web后端项目,涵盖了HTTP请求流程、Flask概览、环境配置、错误处理、数据库连接池、ORM、多线程任务和蓝图模块划分等内容。通过实际的用户注册接口,详细讲解了参数验证、加密、数据库操作等步骤,旨在帮助读者理解Flask的使用和web开发基础。
摘要由CSDN通过智能技术生成

声明:这篇文章主要面向python/Flask/web后端初级开发者,文章主要讲解了如何搭建一个基于Flask的纯web后台项目,以及相关的知识原理。不涉及部署相关操作。由于接触web开发不久,难免会有疏漏的地方,请读者指正。


下面是文章中会涉及到的内容:

HTTP请求发送到后端与响应的过程

Why Flask & 概览

Flask的常用工具和项目配置

pycharm

HTTP requester

redis

从第一个路由注册接口开始

使用装饰器处理接口必填字段

Flask上下文获取request参数

错误处理

数据库连接池

循环引用的那些坑

封装加密方法

ORM与Model

celery多线程、异步任务

设置response模板

完整的注册接口

使用Blueprint进行模块划分

总结与展望

前言

前些日子转了python后台开发=。= 说实话现在对后端更有兴趣。我很享受这种不管做什么都是在学习新的知识的感觉,像新生儿一样对这个世界充满好奇。

这篇文章总结了我最近一段时间的学习成果:使用Flask框架搭建一个可扩展的中小型web service,并在其中加上一些原理的阐述或者链接。在本文中以实际的用户模块为例。之所以写这篇文章是因为自己在入门的时候遇到了很多坑,文档或者个人博客并不能满足我的需要,不是很基础(毫无架构可言,而且大多是不实用的博客项目)就是特别复杂。在此感谢我的同学/同事evolsnow,在开发学习过程中给了我很大的帮助。也希望这篇文章能帮到想入门python/Flask的同学。

HTTP请求发送到后端与响应过程

在进行项目搭建之前,我们先大致回顾一下一个HTTP请求是如何发送至后端并且响应的。

通讯双方进行连接

首先通讯双方遵从HTTP协议。当我们输入这样一个请求:http://www.test.com/api/info ,首先请求端会进行DNS解析,把http://www.test.com 变成一个ip地址,如果url里不包含端口号,则会使用该协议的默认端口号。通过ip地址和端口,三次握手建立一个tcp连接。

请求:连接成功建立后,开始向web服务器发送HTTP请求。Flask通过wsgi协议传递请求。

响应:接到请求后,交给相应路由处理,根据地址转发给相应的控制器(函数)处理。后端大部分工作就是写这些处理过程。处理完成后将最终的response返回给用户。这其中我们拿到的request与response都是由python的wsgi工具包werkzeug提供的。

关闭连接:通讯双方均可关闭socket结束tcp/ip会话。

关于wsgi:wsgi协议将处理请求的组件按照功能及调用关系分成了三种:

server

middleware

application。

其中,server可以调用middleware和application,middleware可以调用application。

符合WSGI的框架对于一次HTTP请求的完整处理过程为:

server读取解析请求,生成environ和start_response,然后调用middleware;

middleware完成自己的处理部分后,可以继续调用下一个middleware或application,形成一个完整的请求链;

application位于请求链的最后一级,其作用就是生成最终的响应。

如需更深入了解该过程,可以查看WSGI、Werkzeug。


一、Why Flask & 概览

我负责项目web后端的用户模块,对并发量要求不高。考虑到Flask小巧简单易上手,同时具有强大的扩展能力,使其功能可以不弱于django、Tornado等框架,我最终选择了Flask。下面是Flask最简单的一个示例,这篇文章要做的就是将其充实、扩展、拆分,使代码具有良好的可扩展性和可读性。

from flask import Flask

app = Flask(__name__)

@app.route('api/test')

def hello():

return 'Hello World!'

if __name__ == '__main__':

app.run()

本文假设你已有基础的python语法知识。装饰器是一种代码运行期间动态增加功能的方式,本质上是一个返回函数的高阶函数,也可以简单的将其理解为一个函数的包装函数。上述代码中的route方法是一个装饰器,这个装饰器的作用就是将地址(api/test)与方法名hello联系起来,当HTTP请求的url为(api/test)时候将调用hello方法进行处理。也就是建立了url与处理函数的映射。深入了解可以查看这篇文章。

看起来不复杂,那就让我们继续吧!先从环境工具配置开始:

常用工具

1.IDE

jetbrains家的pycharm,自带终端(虚拟环境、安装插件、启动redis等操作)、Python Console运行python、Version Control版本控制、Even Log打印。

fda3e4b988a5

pycharm.png

2.请求工具

火狐浏览器插件—HTTP requester。可以自定义请求方式 request methods、请求内容request body、请求头 request header等,当你写好一个接口时,可以非常方便得进行测试。

fda3e4b988a5

httprequester.png

项目配置

1.虚拟环境

可以按官方文档使用终端进行配置,也可以在pycharm的偏好设置里进行设置,这里我们使用python3.5的解释器。安装后执行命令进入虚拟环境,其中yourvenv为你指定创建的虚拟环境目录

$ source yourvenv/bin/activate

2.使用pip进行包管理

pip是python的包管理工具,如果你是通过homebrew安装python则会自动安装pip。其他情况参考stackoverflow。安装好pip之后,在虚拟环境中通过

$ pip install flask(库名)

安装Flask以及其他三方库。

3.配置redis

Reids是现在最流行的的非关系型数据库(key-value)。其数据缓存在内存中,因此效率很高。多用于存储临时的、高度动态的数据。在用户模块中我们将会对验证码进行redis存储(短时间内进行写入读取操作,并且在缓存一定时间后删除)。本文中将会已用户注册时生成的邀请码为例,进行redis存取操作。

从Redis官网下载安装包并按文档安装后,终端执行

$ redis-server

启动redis,在项目中pip安装即可调用其API。

4.项目相关约定

项目采用前后端分离的方式,只进行数据交互,不使用python的jinja2模板去渲染页面给web前端

web前端、iOS、Android与后端数据交互的格式均为json

前端的请求头默认带terminal(前端类型)、version(版本号),后端返回的数据中包含“code”、“msg”参数,co

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值